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

電阻色碼雙色環

中等

說明

如果你想用 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,第三個顏色會被忽略。

定義語法

Caution

這個練習是 Resistor Color的延續,並以它為基礎。 雖然你可以用任何順序完成練習,我們仍鼓勵你按照建議的順序進行。

在這個練習中,顏色的語法已經用 c* 前綴預先定義好了,例如 c*black。 接著你要依照說明,定義出把一連串顏色對應到數字的語法。 顏色會放在 *[[ 和 ]] 之間,並以 , 分隔,例如 *[[c*black, c*yellow, c*violet]]。

這個任務很可能需要用到 notation 或 macro。 你可以參考這份參考資料喔。

因為新語法是在編譯時期展開的,除非所有必要的語法都已定義,否則任何測試都會編譯失敗。 因此,我們不依賴傳統的執行期測試,而是改用 #guard_msgs。 這個指令會把指定的 docstring 與另一個指令(在這裡是 #eval)所產生的訊息相比較,兩者不同時就會回報錯誤。 你可以把沒有出現錯誤當成測試通過。

如果你在本機或 Lean 的線上遊樂場工作,就能透過 Lean InfoView 立即看到 #guard_msgs 回報的任何錯誤。

Caution

線上的測試執行器目前不支援匯入完整的 Lean 元程式設計函式庫。 雖然你可以自由使用 Lean 預設提供的任何功能,包括 Lean 命名空間裡的內容,但只要加上 import Lean,或從 Lean 命名空間匯入特定模組,你的提交在 Exercism 上就會失敗。

請注意,解這個練習並不需要匯入 Lean 函式庫。

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

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

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