Ромб

Ромб

Складна

Вказівки

Ката «Діамант» приймає на вхід літеру та виводить її у формі діаманта. Отримавши літеру, вона друкує діамант, що починається з 'A', а надана літера опиняється в найширшому місці.

Вимоги

  • Перший рядок містить одну 'A'.
  • Останній рядок містить одну 'A'.
  • Усі рядки, крім першого й останнього, мають рівно дві однакові літери.
  • У всіх рядках кількість пробілів у кінці така сама, як і на початку. (Це може бути 0).
  • Діамант симетричний по горизонталі.
  • Діамант симетричний по вертикалі.
  • Діамант має квадратну форму (ширина дорівнює висоті).
  • Літери утворюють форму діаманта.
  • Верхня половина містить літери у порядку зростання.
  • Нижня половина містить літери у порядку спадання.
  • Чотири кути (що містять пробіли) є трикутниками.

Приклади

У наведених нижче прикладах пробіли позначено символами ·.

Діамант для літери 'A':

A

Діамант для літери 'C':

··A··
·B·B·
C···C
·B·B·
··A··

Діамант для літери 'E':

····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····

Підказки

Тести в цій вправі відрізняються від тестів, до яких ми звикли. Зазвичай тест перевіряє, чи для заданих вхідних даних вихідні дані збігаються з очікуваним значенням. Такий підхід називають тестуванням на основі значень. Однак у цій вправі використовується тестування на основі властивостей, де тести перевіряють, чи має вихід певну властивість для багатьох вхідних даних. Є дві ключові відмінності між тестуванням на основі властивостей і тестуванням на основі значень:

  1. Тест на основі властивостей працює не з одним значенням вхідних даних, а з багатьма.
  2. Тест на основі властивостей перевіряє властивості, а не конкретні значення.

У цій вправі всі тести перевіряють певну властивість форми ромба, яку має створювати наш код. Крім того, усі тести перевіряють, чи виконується властивість, яку вони тестують, для всіх допустимих вхідних літер (від 'A' до 'Z').

Щоб уможливити тестування на основі властивостей, тести в цій вправі використовують пакети FsCheck і FsCheck.Xunit. Щоб більше дізнатися про FsCheck, документацію про цей фреймворк можна знайти тут.

Якщо хочете більше інформації про тестування на основі властивостей, радимо прочитати цю статтю.


Джерело

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

Час розпочати Ромб?

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