Ce défi a été inspiré par la programmation d'un microcontrôleur Arduino. J'ai 6 LED et 6 boutons connectés à différentes broches de la carte. Dans le code, chaque bouton et LED reçoit un numéro d'identification (1-6). Les numéros de broche (allant de 0 à 13) correspondant aux numéros d'identification sont recherchés à l'aide d'une switch
déclaration. Par pur amusement, je me demandais si ces switch
es pouvaient être contournés avec une fonction arithmétique / autre juste pour horrifier les futurs responsables de code.
Le défi
Fournissez la fonction / les fonctions qui prennent le numéro d'identification (entier) comme paramètre et renvoient le numéro de broche (entier) pour les 6 voyants et / ou les 6 boutons, sans utiliser d'instructions conditionnelles (non if
, non switch
et pas ternaire).
Valeurs de retour pour les LED:
ID Pin
1 3
2 5
3 6
4 9
5 10
6 11
Renvoie les valeurs des boutons:
ID Pin
1 2
2 4
3 7
4 8
5 12
6 13
Défi bonus
Fournissez une fonction unique qui prend un numéro d'identification (entier) et un deuxième paramètre (n'importe quel type) indiquant si les broches de LED ou de bouton sont demandées, et renvoie la broche correspondante (entier).
Règles
Ce n'est pas un défi spécifique à Arduino. Utilisez n'importe quelle langue , faites ce que vous voulez.
Edit: à la suggestion de steveverril , c'est maintenant un défi de golf de code .
Bonne chance!
(Si vous continuez à lire: bien que manifestement absurdes et arbitraires selon les normes de programmation, les mappages sont basés sur le brochage de l'Arduino Micro. Les broches 0 et 1 sont réservées pour la communication série, les LED sont affectées aux 6 broches compatibles PWM les moins numérotées , les boutons sont affectés aux broches restantes)
1+(1==1)
?
if
, switch
et ternaire) sont hors limites.