Треки
/
Haskell
Haskell
/
Вправи
/
Шифр Атбаш
Шифр Атбаш

Шифр Атбаш

Середня

Вказівки

Створіть реалізацію шифру Атбаш, стародавньої системи шифрування, що виникла на Близькому Сході.

Шифр Атбаш - простий шифр підстановки, який полягає в тому, що всі літери алфавіту переставляються у зворотному порядку, тож утворений алфавіт виявляється перевернутим. Перша літера замінюється на останню, друга - на передостанню, і так далі.

Шифр Атбаш для латинського алфавіту має такий вигляд:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba

Це дуже слабкий шифр: у нього лише один можливий ключ, до того ж це простий моноалфавітний шифр підстановки. Проте за часів цього шифру це, можливо, і не було проблемою.

Шифротекст записують групами фіксованої довжини, яка традиційно становить 5 літер; цифри залишаються без змін, а розділові знаки не враховують. Так складніше щось угадати, спираючись на межі слів. Увесь текст кодується малими літерами.

Приклади

  • Кодування test дає gvhg
  • Кодування x123 yes дає c123b vh
  • Декодування gvhg дає test
  • Декодування gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt дає thequickbrownfoxjumpsoverthelazydog

Підказки

Треба реалізувати функції decode та encode, які декодують і кодують String за допомогою шифру Атбаш. Можна скористатися наданою сигнатурою, якщо є сумніви щодо типів, але хай вона не обмежує творчості.

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

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

import qualified Data.Text as T
import           Data.Text (Text)
  • використовувати тип Text, наприклад decode :: Text -> Text, і звертатися до комбінаторів Data.Text як, наприклад, T.pack.
  • пошукати документацію для Data.Text.
  • замінити всі входження String на Text у Atbash.hs, тобто:
decode :: Text -> Text
decode cipherText = ...

encode :: Text -> Text
encode plainText = ...

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


Джерело

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

Час розпочати Шифр Атбаш?

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