Треки
/
Haskell
Haskell
/
Вправи
/
Поросяча латина
Поросяча латина

Поросяча латина

Середня

Вступ

Батьки кинули нам із братом чи сестрою виклик: зіграти в баскетбол два на два. Впевнені у своїй перемозі, вони дали нам забити перші кілька очок, а потім почали брати гру у свої руки. Потребуючи невеликого поштовху, ми заговорили Pig Latin — вигаданою дитячою мовою, яку нелегко зрозуміти тим, хто вже не дитина. Це дасть нам перевагу і допоможе взяти гору над батьками!

Вказівки

Наше завдання - перекласти текст з англійської на Pig Latin. Переклад визначають чотири правила, які розглядають закономірність голосних і приголосних на початку слова. Ці правила розглядають уживання голосних і приголосних у кожному слові:

  • голосні: літери a, e, i, o та u
  • приголосні: решта 21 літера англійського алфавіту

Правило 1

Якщо слово починається з голосної або з "xr" чи "yt", додаємо звук "ay" у кінець слова.

Наприклад:

  • "apple" -> "appleay" (починається з голосної)
  • "xray" -> "xrayay" (починається з "xr")
  • "yttria" -> "yttriaay" (починається з "yt")

Правило 2

Якщо слово починається з однієї або кількох приголосних, спершу переносимо ці приголосні в кінець слова, а потім додаємо звук "ay" у кінець слова.

Наприклад:

  • "pig" -> "igp" -> "igpay" (починається з однієї приголосної)
  • "chair" -> "airch" -> "airchay" (починається з кількох приголосних)
  • "thrush" -> "ushthr" -> "ushthray" (починається з кількох приголосних)

Правило 3

Якщо слово починається з нуля або більше приголосних, за якими йде "qu", спершу переносимо ці приголосні (якщо вони є) і частину "qu" у кінець слова, а потім додаємо звук "ay" у кінець слова.

Наприклад:

  • "quick" -> "ickqu" -> "ickquay" (починається з "qu", без приголосних перед ним)
  • "square" -> "aresqu" -> "aresquay" (починається з однієї приголосної, за якою йде "qu")

Правило 4

Якщо слово починається з однієї або кількох приголосних, за якими йде "y", спершу переносимо приголосні, що стоять перед "y", у кінець слова, а потім додаємо звук "ay" у кінець слова.

Кілька прикладів:

  • "my" -> "ym" -> "ymay" (починається з однієї приголосної, за якою йде "y")
  • "rhythm" -> "ythmrh" -> "ythmrhay" (починається з кількох приголосних, за якими йде "y")

Підказки

Модульні тести дають приклади слів. Спробуймо згрупувати приголосні незалежно від конкретних комбінацій приголосних у модульних тестах.

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

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

  • Прочитайте про типи рядків тексту (англ. string) у Haskell.

  • Додайте - text до свого списку залежностей у package.yaml.

  • Імпортуйте Data.Text у такий спосіб:

    import qualified Data.Text as T
    import           Data.Text (Text)
    
  • Тепер можна написати, наприклад, translate :: Text -> Text, і звертатися до комбінаторів Data.Text як, наприклад, T.isSuffixOf.

  • Знайдіть документацію для Data.Text,

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

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

Час розпочати Поросяча латина?

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

Глибоке занурення у Поросяча латина!

Ми розглянемо зіставлення зі зразком і регулярні вирази, а також гарне рішення мовою Prolog, і запитаємо себе: чи ми розвʼязали вправу, чи лише змусили тести пройти?