Коли вправу hello-world уже реалізовано, наступне завдання - реалізувати ще 20+ інших вправ.
Існує два типи вправ, які можна реалізувати:
Загалом новим трекам ми радимо починати з практичних вправ, бо їх простіше реалізувати і вони вимагають менше попередніх роздумів. Концептуальні вправи завжди можна додати пізніше, коли трек уже повноцінно працює.
Щоб допомогти трекам реалізовувати практичні вправи, ми створили репозиторій exercism/problem-specifications. Цей репозиторій містить метадані для понад 100 практичних вправ, які різні треки можуть використовувати, щоб реалізувати власні версії цих вправ. Саме тому ті самі вправи трапляються в багатьох різних треках.
То як вибрати ті 20+ із цього списку з понад 100 вправ? Ось кілька порад.
У понад 100 вправах використовується дуже багато різних концепцій. Варто прагнути реалізовувати вправи, у яких студенти відпрацьовують найрізноманітніші концепції. Тож замість того, щоб реалізувати 20 вправ про рядки тексту, спробуймо реалізувати вправи на різні концепції.
Ось кілька концепцій із прикладами вправ:
| Концепції | Вправи |
|---|---|
| Побітові операції | allergies, secret-handshake |
| Булеві значення (англ. Boolean) | 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 |
| Рядки тексту (англ. string) | bob, isogram, |
| Дерева | binary-search-tree, pov |
Деякі вправи реалізувати складніше, ніж інші. Варто реалізовувати вправи різного рівня складності: кілька легких, кілька середніх і кілька складних.
Складність вправи залежить від кількох чинників, зокрема від її концепцій і мови треку. Може допомогти подивитися, як цю вправу реалізовано в інших треках, які вже її впровадили, щоб краще уявити, як може мати вигляд власна реалізація.
Ось кілька рівнів складності з прикладами вправ:
| Складність | Вправи |
|---|---|
| Легка | darts, gigasecond, isogram, leap, resistor-color, space-age |
| Середня | allergies, bob, meetup, protein-translation, raindrops, secret-handshake |
| Складна | alphametics, forth, react, pov, zebra-puzzle, zipper |
Не всі вправи можуть підходити для треку. Варто обирати лише ті вправи, що підходять для треку: краще не реалізувати вправу, ніж реалізувати ту, яка не має сенсу. Наприклад, у вправі lens-person студент працює з лінзами, які підтримують не всі мови.
Якщо трапиться вправа, яка не підходить для треку, її слаг можна додати до масиву exercises.foregone у файлі config.json треку.
Тоді інструментарій ігноруватиме цю вправу.
Щоб усе це стало конкретнішим, ось як може мати вигляд приклад добірки початкових вправ:
| Вправа | Складність | Концепції |
|---|---|---|
| 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 | Складна | Розбір |
Коли вправи, які хочеться включити до треку, вибрано, наступний крок - реалізувати їх. У документації про додавання практичної вправи докладно описано, як додати практичну вправу.