Se vuoi costruire qualcosa con un Raspberry Pi, probabilmente userai dei resistori. Per questo esercizio, devi sapere due cose sui resistori:
Per aggirare questo problema, i produttori stampano delle bande colorate sui resistori per indicare i loro valori di resistenza. Ogni banda ha una posizione e un valore numerico.
Le prime 2 bande di un resistore hanno un semplice schema di codifica: ogni colore corrisponde a un singolo numero. Ad esempio, se stampassero una banda brown (valore 1) seguita da una banda green (valore 5), corrisponderebbe al numero 15.
In questo esercizio creerai un programma utile per non dover ricordare i valori delle bande. Il programma prenderà nomi di colori come input e produrrà in output un numero a due cifre, anche se l'input è composto da più di due colori!
I colori delle bande sono codificati come segue:
Dall'esempio sopra: brown-green dovrebbe restituire 15, e anche brown-green-violet dovrebbe restituire 15, ignorando il terzo colore.
Devi implementare la funzione
value :: (Color, Color) -> Int
che accetta solo due colori e produce la componente numerica del valore della resistenza.
Bonus: test delle proprietà
Questo esercizio è una buona occasione per scrivere qualche test delle proprietà. Se non ne hai mai scritti prima, ecco alcune risorse:
Nel file di test abbiamo fornito un esempio di test delle proprietà con QuickCheck.
Esempi di proprietà che si possono testare:
value (x, y) >= 10 per tutti i (x, y) in cui x non è Black
Chiamare show su value (x, y) produce la stringa ottenuta applicando reverse a quella prodotta chiamando show su value (y, x).
Tutti i colori hanno nomi unici. (Per due colori qualsiasi, se i colori sono diversi, lo sono anche i loro nomi.)
Iscriviti a Exercism per imparare e padroneggiare Haskell con 107 esercizi e il mentoring di persone reali, tutto gratis.