Треки
/
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]].

Для цього завдання, ймовірно, знадобляться нотації або макроси. Варто зазирнути до довідки.

Оскільки новий синтаксис розгортається під час компіляції, будь-який тест не скомпілюється, доки не буде визначено весь потрібний синтаксис. Тому замість традиційних тестів часу виконання ми використовуємо #guard_msgs. Ця команда порівнює заданий docstring із повідомленням, яке згенерувала інша команда, у цьому випадку #eval, і повідомляє про помилку, якщо вони різняться. Відсутність помилки можна вважати успішно пройденим тестом.

Якщо ми працюємо локально або в онлайн-пісочниці Lean, то отримаємо миттєвий відгук про будь-яку помилку, яку повідомляє #guard_msgs, через Lean InfoView.

Caution

Онлайн-засіб запуску тестів наразі не підтримує імпорт повної бібліотеки метапрограмування Lean. Хоча ми можемо вільно використовувати будь-які можливості, доступні в Lean за замовчуванням, зокрема ті, що містяться в просторі імен Lean, додавання import Lean або імпорт окремих модулів із простору імен Lean призведе до того, що наше рішення не пройде під час надсилання до Exercism.

Зауважимо, що імпортувати бібліотеку Lean для розвʼязання цієї вправи не потрібно.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Lean Exercism

Час розпочати Дуо кольорів резистора?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Lean, а також 100 вправ та справжнє наставництво від людей, і все це безкоштовно.