Wenn du etwas mit einem Raspberry Pi bauen möchtest, wirst du wahrscheinlich Widerstände verwenden. Für diese Übung musst du zwei Dinge über sie wissen:
Um dieses Problem zu umgehen, drucken Hersteller farbcodierte Bänder auf die Widerstände, um ihre Widerstandswerte anzugeben. Jedes Band hat eine Position und einen numerischen Wert.
Die ersten 2 Bänder eines Widerstands haben ein einfaches Kodierungsschema: Jede Farbe entspricht einer einzelnen Zahl. Wenn sie zum Beispiel ein braunes Band (Wert 1) gefolgt von einem grünen Band (Wert 5) aufdrucken würden, ergäbe das die Zahl 15.
In dieser Übung wirst du ein hilfreiches Programm erstellen, damit du dir die Werte der Bänder nicht merken musst. Das Programm nimmt Farbnamen als Eingabe und gibt eine zweistellige Zahl aus, selbst wenn die Eingabe mehr als zwei Farben umfasst!
Die Farben der Bänder sind wie folgt kodiert:
Aus dem obigen Beispiel: brown-green sollte 15 zurückgeben, und brown-green-violet sollte ebenfalls 15 zurückgeben, wobei die dritte Farbe ignoriert wird.
Du musst die Funktion
value :: (Color, Color) -> Int
implementieren, die nur zwei Farben entgegennimmt und daraus den numerischen Wertanteil des Widerstands erzeugt.
Bonus - Property Testing:
Diese Übung ist eine gute Gelegenheit, ein paar Property-Tests zu schreiben. Wenn du noch nie welche geschrieben hast, findest du hier ein paar Ressourcen:
In der Testdatei haben wir einen beispielhaften Property-Test mit QuickCheck bereitgestellt.
Beispiele für Eigenschaften, die getestet werden können:
value (x, y) >= 10 für alle (x, y), bei denen x nicht Black ist
Ein Aufruf von show auf value (x, y) erzeugt den mit reverse umgedrehten String des Aufrufs von show auf value (y, x).
Alle Farben haben eindeutige Namen. (Für zwei beliebige Farben gilt: Wenn die Farben verschieden sind, sind auch ihre Namen verschieden.)
Melde dich bei Exercism an, um Haskell mit 107 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.