學習軌道
/
Haskell
Haskell
/
練習
/
電阻色碼雙色環
電阻色碼雙色環

電阻色碼雙色環

簡單

說明

如果你想用 Raspberry Pi 打造一些東西,大概會用到_電阻_。在這道練習裡,你需要知道關於電阻的兩件事:

  • 每個電阻都有一個電阻值。
  • 電阻很小,小到就算把電阻值印在上頭,也很難看清楚。

為了解決這個問題,製造商會在電阻上印上以顏色標示的色帶,用來表示電阻值。每條色帶都有它的位置和一個數值。

前 2 條色帶的編碼方式很簡單:每種顏色都對應到單一個數字。舉例來說,如果印上 brown 色帶(值為 1),後面接著 green 色帶(值為 5),就會轉換成數字 15。

在這道練習中,你要寫一個好用的小程式,讓你不用再背色帶的數值。這個程式會接收顏色名稱作為輸入,並輸出一個兩位數的數字,即使輸入超過兩種顏色也一樣!

色帶顏色的編碼如下:

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

從上面的例子來看: brown-green 應該回傳 15,而 brown-green-violet 也應該回傳 15,第三個顏色會被忽略。

提示

你需要實作這個函式

value :: (Color, Color) -> Int

它只接受兩個顏色,並產生該電阻器電阻的數值部分。

加分題:性質測試

這個練習是寫一些性質測試的好機會。如果你之前沒寫過,這裡有一些資源:

  1. School of Haskell。
  2. Real world Haskell

我們在測試檔中提供了一個 QuickCheck 性質測試的範例。

可以測試的性質範例:

  • 對所有x不是Black的(x, y),value (x, y) >= 10皆成立

  • 對value (x, y)呼叫show,會產生把對value (y, x)呼叫show的結果reverse後的字串。

  • 所有顏色都有獨一無二的名稱。(對任意兩個顏色而言,如果顏色不同,名稱也就不同。)

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Haskell Exercism

準備好開始 電阻色碼雙色環 了嗎?

註冊 Exercism,透過 107 個練習 和真人引導來學習並精通 Haskell,全部免費。