Raspberry Piで何かを作ろうと思ったら、おそらく_抵抗器_を使うことになるでしょう。この演習では、抵抗器について2つのことを知っておく必要があります。
この問題を回避するために、メーカーは抵抗器にカラーコードの帯を印刷して、抵抗値を示しています。それぞれの帯には位置と数値があります。
抵抗器の最初の2本の帯には、シンプルな符号化の仕組みがあります。それぞれの色が1つの数値に対応するのです。たとえば、brownの帯(値1)の次にgreenの帯(値5)が印刷されていれば、それは15という数値になります。
この演習では、帯の値を覚えておかなくても済むように、便利なプログラムを作ります。このプログラムは色の名前を入力として受け取り、2桁の数値を出力します。入力が2色より多くても同じです。
帯の色は次のように符号化されています。
上の例では、 brown-greenは15を返し、 brown-green-violetも、3番目の色を無視して15を返すはずです。
実装する必要がある関数は、次のとおりです。
value :: (Color, Color) -> Int
この関数は2つの色だけを受け取り、抵抗器の抵抗値の数値部分を返します。
ボーナス:プロパティテスト
この演習は、プロパティテストを書くのにうってつけの機会です。これまでに書いたことがない場合は、次の資料を参考にしてください。
テストファイルには、QuickCheckのプロパティテストのサンプルを1つ用意してあります。
テストできるプロパティの例を挙げます。
xがBlackでないすべての(x, y)について、value (x, y) >= 10が成り立ちます。
value (x, y)にshowを呼び出すと、value (y, x)にshowを呼び出した結果をreverseした文字列が得られます。
すべての色は一意な名前を持ちます。(任意の2つの色について、色が異なれば名前も異なります。)