實作完hello-world練習後,下一個任務就是再實作 20 個以上的練習。
你可以實作的練習分成兩種:
一般來說,我們建議新的 track 先從實作練習開始,因為它們比較容易實作,事前也不用想太多。等你的 track 順利運作之後,隨時都可以再加入概念練習。
為了協助各 track 實作實作練習,我們建立了 exercism/problem-specifications 儲存庫。 這個儲存庫收錄了超過 100 個實作練習的中繼資料,各個 track 可以據此實作出自己版本的這些練習。 因此,你會看到許多不同的 track 都實作了相同的練習。
那麼,該怎麼從這 100 多個練習中挑出 20 個以上呢? 以下提供一些建議。
這 100 多個練習所涵蓋的概念非常多元。 你應該以能讓學生練習多種不同概念的練習為目標。 所以,與其實作 20 個都繞著字串打轉的練習,不如盡量挑選著重不同概念的練習。
以下列出一些概念及對應的範例練習:
| 概念 | 練習 |
|---|---|
| 位元操作 | allergies, secret-handshake |
| 布林 | leap |
| 類別 | circular-buffer, robot-name |
| 並行 | bank-account |
| 條件式 | raindrops |
| 日期與時間 | gigasecond, meetup |
| 相等性 | clock |
| 浮點數 | darts, space-age |
| 惰性 | alphametics, zebra-puzzle |
| 陣列 | resistor-color, spiral-matrix |
| 迴圈 | collatz-conjecture, protein-translation |
| 映射 | nucleotide-count |
| 數字 | leap, grains |
| 隨機性 | dnd-character, robot-name |
| 字串 | bob, isogram, |
| 樹狀結構 | binary-search-tree, pov |
有些練習實作起來會比其他練習困難。 你應該挑選難度各異的練習:一些簡單的、一些中等難度的,再一些困難的。
練習的難易程度取決於幾個因素,例如涉及的概念,以及這個 track 使用的程式語言。 不妨看看其他已經實作過同一個練習的 track 是怎麼寫的,這樣會更容易抓到實作起來大概會是什麼樣子。
以下列出一些難度分級及對應的練習:
| 難度 | 練習 |
|---|---|
| 簡單 | darts, gigasecond, isogram, leap, resistor-color, space-age |
| 中等 | allergies, bob, meetup, protein-translation, raindrops, secret-handshake |
| 困難 | alphametics, forth, react, pov, zebra-puzzle, zipper |
不是每個練習都適合你的 track。 你應該只挑選適合自己 track 的練習;與其實作一個不合理的練習,還不如不要實作。 舉例來說,lens-person 練習要學生操作 lenses,但許多程式語言並不支援。
如果你發現某個練習不適合你的 track,可以把它的 slug 加到 track 的 config.json 檔案裡的exercises.foregone陣列中。
這樣一來,工具就會忽略這個練習。
為了讓這些建議更具體一點,以下是一個初始練習挑選的範例:
| 練習 | 難度 | 概念 |
|---|---|---|
| hello-world | 簡單 | 無(初始練習) |
| leap | 簡單 | 數字、布林 |
| gigasecond | 簡單 | 日期與時間 |
| isogram | 簡單 | 字串 |
| resistor-color | 簡單 | 陣列 |
| nucleotide-count | 簡單 | 映射 |
| collatz-conjecture | 簡單 | 迴圈 |
| darts | 簡單 | 浮點數 |
| two-fer | 簡單 | 字串格式化、選擇性引數 |
| high-scores | 簡單 | 集合處理 |
| raindrops | 中等 | 條件式 |
| bob | 中等 | 字串 |
| allergies | 中等 | 位元操作 |
| series | 中等 | 例外 |
| circular-buffer | 中等 | 類別 |
| meetup | 中等 | 日期與時間 |
| yacht | 中等 | 陣列 |
| dominoes | 困難 | 元組、惰性 |
| diamond | 困難 | 字串格式化 |
| alphametics | 困難 | 惰性 |
| forth | 困難 | 解析 |
挑好想放進 track 的練習之後,下一步就是把它們實作出來。 新增實作練習的說明文件中有詳細的步驟,說明如何新增一個實作練習。