Створіть реалізацію шифру Атбаш, стародавньої системи шифрування, що виникла на Близькому Сході.
Шифр Атбаш - простий шифр підстановки, який полягає в тому, що всі літери алфавіту переставляються у зворотному порядку, тож утворений алфавіт виявляється перевернутим. Перша літера замінюється на останню, друга - на передостанню, і так далі.
Шифр Атбаш для латинського алфавіту має такий вигляд:
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.
Як необовʼязкове розширення до цієї вправи, можна
- text до списку залежностей у package.yaml.Data.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 = ...
Ця частина цілком необовʼязкова.