Якщо ми хочемо щось створити за допомогою Raspberry Pi, нам, ймовірно, знадобляться резистори. Для цієї вправи нам потрібно знати дві речі про них:
Щоб обійти цю проблему, виробники наносять на резистори кольорові смуги з кодуванням, щоб позначити їхні значення опору. Кожна смуга має позицію та числове значення.
Перші 2 смуги резистора мають просту схему кодування: кожен колір відповідає одному числу. Наприклад, якщо вони надрукували смугу brown (значення 1), а за нею смугу green (значення 5), це відповідало б числу 15.
У цій вправі ми створимо корисну програму, щоб нам не доводилося запамʼятовувати значення смуг. Програма прийматиме назви кольорів як вхідні дані та виводитиме двозначне число, навіть якщо вхідних кольорів більше двох!
Кольори смуг кодуються так:
З наведеного вище прикладу: brown-green має повертати 15, і brown-green-violet також має повертати 15, ігноруючи третій колір.
Ця вправа задумана як продовження вправи Resistor Color і спирається на неї.
Хоча практичні вправи можна розвʼязувати в будь-якому порядку, радимо дотримуватися запропонованої послідовності.
У цій вправі нам уже задано синтаксис для кольорів за допомогою префікса c*, наприклад c*black.
Далі потрібно визначити синтаксис, який зіставляє послідовність кольорів із числом, згідно з інструкціями.
Кольори стоять між *[[ та ]] і розділені , , наприклад *[[c*black, c*yellow, c*violet]].
Для цього завдання, ймовірно, знадобляться нотації або макроси. Варто зазирнути до довідки.
Оскільки новий синтаксис розгортається під час компіляції, будь-який тест не скомпілюється, доки не буде визначено весь потрібний синтаксис.
Тому замість традиційних тестів часу виконання ми використовуємо #guard_msgs.
Ця команда порівнює заданий docstring із повідомленням, яке згенерувала інша команда, у цьому випадку #eval, і повідомляє про помилку, якщо вони різняться.
Відсутність помилки можна вважати успішно пройденим тестом.
Якщо ми працюємо локально або в онлайн-пісочниці Lean, то отримаємо миттєвий відгук про будь-яку помилку, яку повідомляє #guard_msgs, через Lean InfoView.
Онлайн-засіб запуску тестів наразі не підтримує імпорт повної бібліотеки метапрограмування Lean.
Хоча ми можемо вільно використовувати будь-які можливості, доступні в Lean за замовчуванням, зокрема ті, що містяться в просторі імен Lean, додавання import Lean або імпорт окремих модулів із простору імен Lean призведе до того, що наше рішення не пройде під час надсилання до Exercism.
Зауважимо, що імпортувати бібліотеку Lean для розвʼязання цієї вправи не потрібно.