Crea un'implementazione del cifrario Atbash, un antico sistema di crittografia nato in Medio Oriente.
Il cifrario Atbash è un semplice cifrario a sostituzione che si basa sull'inversione di tutte le lettere dell'alfabeto, così che l'alfabeto risultante sia al contrario. La prima lettera viene sostituita con l'ultima, la seconda con la penultima, e così via.
Un cifrario Atbash per l'alfabeto latino sarebbe il seguente:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
È un cifrario molto debole, perché ha una sola chiave possibile ed è un semplice cifrario a sostituzione monoalfabetica. Tuttavia, all'epoca del cifrario questo potrebbe non essere stato un problema.
Il testo cifrato viene scritto in gruppi di lunghezza fissa, tradizionalmente di 5 lettere, lasciando invariati i numeri ed escludendo la punteggiatura. Lo scopo è rendere più difficile indovinare qualcosa basandosi sui confini tra le parole. Tutto il testo verrà codificato in lettere minuscole.
test dà gvhg
x123 yes dà c123b vh
gvhg dà test
gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt dà thequickbrownfoxjumpsoverthelazydog
Devi implementare le funzioni decode e encode, che decodificano e codificano una String usando un cifrario Atbash.
Puoi usare la firma fornita se hai dubbi sui tipi, ma non lasciare che limiti la tua creatività.
Questo esercizio lavora con dati testuali. Per ragioni storiche, il tipo
String di Haskell è sinonimo di [Char], un array di caratteri. Per gestire
i dati testuali in modo più efficiente, si può usare il tipo Text.
Come estensione facoltativa di questo esercizio, puoi
- text all'elenco delle dipendenze in package.yaml.Data.Text in questo
modo:import qualified Data.Text as T
import Data.Text (Text)
Text, ad esempio decode :: Text -> Text, e riferirti ai
combinatori di Data.Text come, ad esempio, T.pack.Data.Text.String con Text in Atbash.hs, cioè:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
Questa parte è del tutto facoltativa.
Iscriviti a Exercism per imparare e padroneggiare Haskell con 107 esercizi e il mentoring di persone reali, tutto gratis.