如果你想用 Raspberry Pi 打造一些東西,大概會用到_電阻_。在這道練習裡,你需要知道關於電阻的兩件事:
為了解決這個問題,製造商會在電阻上印上以顏色標示的色帶,用來表示電阻值。每條色帶都有它的位置和一個數值。
前 2 條色帶的編碼方式很簡單:每種顏色都對應到單一個數字。舉例來說,如果印上 brown 色帶(值為 1),後面接著 green 色帶(值為 5),就會轉換成數字 15。
在這道練習中,你要寫一個好用的小程式,讓你不用再背色帶的數值。這個程式會接收顏色名稱作為輸入,並輸出一個兩位數的數字,即使輸入超過兩種顏色也一樣!
色帶顏色的編碼如下:
從上面的例子來看: brown-green 應該回傳 15,而 brown-green-violet 也應該回傳 15,第三個顏色會被忽略。
你需要實作這個函式
value :: (Color, Color) -> Int
它只接受兩個顏色,並產生該電阻器電阻的數值部分。
加分題:性質測試
這個練習是寫一些性質測試的好機會。如果你之前沒寫過,這裡有一些資源:
我們在測試檔中提供了一個 QuickCheck 性質測試的範例。
可以測試的性質範例:
對所有x不是Black的(x, y),value (x, y) >= 10皆成立
對value (x, y)呼叫show,會產生把對value (y, x)呼叫show的結果reverse後的字串。
所有顏色都有獨一無二的名稱。(對任意兩個顏色而言,如果顏色不同,名稱也就不同。)