Ромб

Ромб

Легка

Вказівки

Ката «Діамант» приймає на вхід літеру та виводить її у формі діаманта. Отримавши літеру, вона друкує діамант, що починається з '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····

Підказки

Реалізуйте функцію diamond, яка виводить ромб, що починається з A, а в найширших його точках стоїть заданий символ. Скористайтеся наведеною сигнатурою, якщо є сумніви щодо типів, але не дозволяйте їй обмежувати творчий підхід:

diamond :: Char -> Maybe [String]

У цій вправі ми працюємо з текстовими даними. З історичних причин тип String у Haskell є синонімом [Char], тобто масиву символів. Для ефективнішої роботи з текстовими даними можна використати тип Text.

Як необовʼязкове доповнення до цієї вправи можна

import qualified Data.Text as T
import           Data.Text (Text)
  • Тепер можна написати, наприклад, diamond :: Char -> Maybe [Text] і звертатися до комбінаторів Data.Text як, наприклад, T.pack,
  • Знайти документацію для Data.Text,
  • Потім можна замінити всі входження String на Text у Diamond.hs:
diamond :: Char -> Maybe [Text]

Ця частина цілком необовʼязкова.


Джерело

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

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

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