Si tu veux construire quelque chose avec un Raspberry Pi, tu utiliseras probablement des résistances. Pour cet exercice, tu dois connaître deux choses à leur sujet :
Pour contourner ce problème, les fabricants impriment sur les résistances des bandes colorées qui indiquent leur valeur de résistance. Chaque bande a une position et une valeur numérique.
Les 2 premières bandes d'une résistance suivent un schéma d'encodage simple : chaque couleur correspond à un seul nombre. Par exemple, si on imprimait une bande brown (valeur 1) suivie d'une bande green (valeur 5), cela donnerait le nombre 15.
Dans cet exercice, tu vas créer un programme bien utile pour ne plus avoir à mémoriser les valeurs des bandes. Le programme prendra des noms de couleurs en entrée et renverra un nombre à deux chiffres, même si l'entrée contient plus de deux couleurs !
Les couleurs des bandes sont encodées comme suit :
D'après l'exemple ci-dessus : brown-green doit renvoyer 15, et brown-green-violet doit aussi renvoyer 15, en ignorant la troisième couleur.
Tu dois implémenter la fonction
value :: (Color, Color) -> Int
qui n'accepte que deux couleurs et produit la composante numérique de la valeur de sa résistance.
Bonus : tests de propriétés
Cet exercice est une bonne occasion d'écrire des tests de propriétés. Si tu n'en as jamais écrit, voici quelques ressources :
On a fourni un exemple de test de propriété QuickCheck dans le fichier de test.
Exemples de propriétés que l'on peut tester :
value (x, y) >= 10 pour tous les (x, y) où x n'est pas Black
L'appel de show sur value (x, y) produit la reverse inversée de l'appel de show sur value (y, x).
Toutes les couleurs ont des noms uniques. (Pour deux couleurs quelconques, si les couleurs sont différentes, leurs noms le sont aussi.)
Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.