Este desafío se inspiró en la programación de un microcontrolador Arduino. Tengo 6 LED y 6 botones conectados a varios pines en el tablero. En el código, a cada botón y LED se le asigna un número de identificación (1-6). Los números de PIN (que van del 0 al 13) correspondientes a los números de ID se buscan utilizando una switch
declaración. Solo para divertirme, me preguntaba si estos switch
eses podrían eludirse con una función aritmética / otra solo para horrorizar a los futuros mantenedores de código.
El reto
Proporcione la función / funciones que toman el número de ID (entero) como parámetro y devuelve el número de pin (entero) para los 6 LED y / o los 6 botones, sin usar declaraciones condicionales (no if
, no switch
y no ternary).
Valores de retorno para LED:
ID Pin
1 3
2 5
3 6
4 9
5 10
6 11
Valores de retorno para botones:
ID Pin
1 2
2 4
3 7
4 8
5 12
6 13
Desafío de bonificación
Proporcione una única función que tome un número de identificación (entero) y un segundo parámetro (cualquier tipo) que indique si se solicitan LED o pines de botón, y devuelva el pin correspondiente (entero).
Reglas
Este no es un desafío específico de Arduino. Usa cualquier idioma , haz lo que quieras.
Editar: a sugerencia de steveverril , este es ahora un desafío de golf de código .
¡Buena suerte!
(Si todavía está leyendo: aunque es evidentemente absurdo y arbitrario según los estándares de programación, los mapeos se basan en el pinout del Arduino Micro. Los pines 0 y 1 están reservados para la comunicación en serie, los LED se asignan a los 6 pines con capacidad PWM con el número más bajo , los botones se asignan a los pines restantes)
1+(1==1)
?
if
, switch
y ternario) están fuera de los límites.