Parcours
/
Haskell
Haskell
/
Exercices
/
Duo de couleurs de résistance
Duo de couleurs de résistance

Duo de couleurs de résistance

Facile

Instructions

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 :

  • Chaque résistance possède une valeur de résistance.
  • Les résistances sont minuscules, à tel point que si on imprimait la valeur de résistance dessus, il serait difficile de la lire.

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 :

  • black : 0
  • brown : 1
  • red : 2
  • orange : 3
  • yellow : 4
  • green : 5
  • blue : 6
  • violet : 7
  • grey : 8
  • white : 9

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.

Indices

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 :

  1. School of Haskell.
  2. Real world Haskell

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.)

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Haskell Exercism

Prêt à commencer Duo de couleurs de résistance ?

Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.