Esse desafio foi inspirado na programação de um microcontrolador Arduino. Tenho 6 LEDs e 6 botões conectados a vários pinos na placa. No código, cada botão e LED recebe um número de identificação (1-6). Os números dos pinos (variando de 0 a 13) correspondentes aos números de identificação são pesquisados usando uma switch
instrução. Puramente por diversão, eu queria saber se essas switch
es poderiam ser contornadas com uma função aritmética / outra apenas para horrorizar futuros mantenedores de código.
O desafio
Forneça a função / funções que tomam o número de identificação (número inteiro) como parâmetro e retorne o número do pino (número inteiro) para os 6 LEDs e / ou os botões 6, sem usar instruções condicionais (não if
, não switch
e não ternário).
Valores de retorno para LEDs:
ID Pin
1 3
2 5
3 6
4 9
5 10
6 11
Retorne valores para os botões:
ID Pin
1 2
2 4
3 7
4 8
5 12
6 13
Desafio de bônus
Forneça uma única função que use um número de identificação (número inteiro) e um segundo parâmetro (qualquer tipo) indicando se os pinos de LED ou botão são solicitados e retorne o pino correspondente (número inteiro).
Regras
Este não é um desafio específico do Arduino. Use qualquer idioma , faça o que quiser.
Edit: por sugestão de steveverril , este é agora um desafio de código de golfe .
Boa sorte!
(Se você ainda está lendo: apesar de claramente absurdo e arbitrário pelos padrões de programação, os mapeamentos são baseados na pinagem do Arduino Micro. Os pinos 0 e 1 são reservados para comunicação serial, os LEDs são atribuídos aos 6 pinos com capacidade PWM de número mais baixo botões são atribuídos aos pinos restantes)
1+(1==1)
?
if
, switch
e ternário) estão fora dos limites.