如果你想要用 Raspberry Pi 做點東西,大概就會用到_電阻_。在這個練習中,你只需要知道關於電阻的三件事:
每個電阻都有它的電阻值。
電阻很小,小到就算你把電阻值印在上頭,也很難看清楚。為了解決這個問題,製造商會在電阻上印上以顏色編碼的色帶,用來表示它們的電阻值。
每個色帶就像是數字中的一位數。舉例來說,如果印上 brown 色帶(值為 1),後面接著 green 色帶(值為 5),那就代表數字 15。在這個練習中,你要寫一個好用的小程式,這樣你就不用去記每個色帶代表的值。這個程式會接收 3 種顏色作為輸入,並以歐姆為單位輸出正確的數值。色帶的編碼方式如下:
black: 0
brown: 1
red: 2
orange: 3
yellow: 4
green: 5
blue: 6
violet: 7
grey: 8
white: 9
在 Resistor Color Duo 裡,你解碼了前兩種顏色。例如:orange-orange 會得到主要數值33。第三種顏色代表要在主要數值後面補上幾個零。主要數值加上這些零,就是電阻的歐姆值。在這個練習裡,歐姆實際上代表什麼並不重要。例如:
(如果你對數學很在行,也可以把這些零想成 10 的次方。如果你不愛數學,那就直接用零來想。兩者其實是同一件事,只是用白話說,而不是數學術語。)
這個練習要做的,是把顏色轉換成一段標籤:
"... ohms"
所以輸入"orange", "orange", "black"時,應該回傳:
"33 ohms"
當電阻比較大時,會用公制前綴來表示更大的歐姆數量級,例如 "kiloohms"。這就像說「2 公里」而不是「2000 公尺」,或是用「2 公斤」來表示「2000 公克」一樣。
例如,輸入"orange", "orange", "orange"時,應該回傳:
"33 kiloohms"
這個練習是 Resistor Color Duo 的延續,並以其為基礎。
雖然你可以任意順序解練習,我們仍建議你依照建議的順序進行。
在這個練習中,顏色的語法已經用c*前綴預先定義好了,例如c*black。
接著你必須依照指示,定義語法來把一串顏色對應到帶有 SI 單位的電阻值,可能還會包含公制前綴。
顏色會放在*[[和]]之間,並以, 分隔,例如*[[c*black, c*yellow, c*violet]]。
這項任務可能需要你使用記法或巨集。 你可以參考這份參考資料。
由於新語法是在編譯期展開的,除非所有必要的語法都已定義,否則任何測試都無法通過編譯。
因此,我們不依賴傳統的執行期測試,而是使用 #guard_msgs。
這個指令會比較給定的文件字串與另一個指令所產生的訊息(在這裡是 #eval),如果兩者不同就會回報錯誤。
沒有回報錯誤,就代表測試通過。
如果你在本機或 Lean 的線上遊樂場中工作,就能透過 Lean InfoView 立即看到 #guard_msgs 回報的任何錯誤。
電阻值應該使用單位 Ω(歐姆)輸出。
這個 Unicode 字元可以在本機或 Lean 的線上遊樂場中用快速鍵 \ohm 產生。
如果你在 Exercism 的線上編輯器中工作,可以直接從指示中複製這個字元。
線上測試執行器目前不支援匯入完整的 Lean 元程式設計程式庫。
雖然你可以自由使用 Lean 預設提供的任何功能,包括 Lean 命名空間裡的功能,但若加入 import Lean 或從 Lean 命名空間匯入特定模組,你的提交內容在提交到 Exercism 時就會失敗。
請注意,解這個練習並不需要匯入 Lean 程式庫。