Questa sfida è stata ispirata dalla programmazione di un microcontrollore Arduino. Ho 6 LED e 6 pulsanti collegati a vari pin sulla scheda. Nel codice, a ciascun pulsante e LED è assegnato un numero ID (1-6). I numeri di pin (compresi tra 0 e 13) corrispondenti ai numeri ID vengono cercati utilizzando aswitch
un'istruzione. Per puro divertimento, mi chiedevo se questi switch
es potessero essere elusi con un'aritmetica / altra funzione solo per spaventare i futuri manutentori del codice.
La sfida
Fornire la funzione / le funzioni che accettano il numero ID (numero intero) come parametro e restituiscono il numero del pin (numero intero) per i 6 LED e / o i 6 pulsanti, senza utilizzare istruzioni condizionali (no if
, no switch
e no ternary).
Valori di ritorno per LED:
ID Pin
1 3
2 5
3 6
4 9
5 10
6 11
Valori di ritorno per i pulsanti:
ID Pin
1 2
2 4
3 7
4 8
5 12
6 13
Sfida bonus
Fornire una singola funzione che accetta un numero ID (intero) e un secondo parametro (qualsiasi tipo) che indica se sono richiesti LED o pin dei pulsanti e restituisce il pin corrispondente (intero).
Regole
Questa non è una sfida specifica per Arduino. Usa qualsiasi lingua , fai quello che vuoi.
Modifica: su suggerimento di Steveverril , questa è ora una sfida al golf del codice .
In bocca al lupo!
(Se stai ancora leggendo: sebbene palesemente assurdo e arbitrario secondo gli standard di programmazione, i mapping sono basati sulla piedinatura di Arduino Micro. I pin 0 e 1 sono riservati per la comunicazione seriale, i LED sono assegnati ai 6 pin con PWM con il numero più basso , i pulsanti sono assegnati ai pin rimanenti)
1+(1==1)
?
if
, switch
e ternario) sono off limits.