Crée une implémentation du chiffre d'Atbash, un ancien système de chiffrement créé au Moyen-Orient.
Le chiffre d'Atbash est un chiffre de substitution simple qui repose sur la transposition de toutes les lettres de l'alphabet, de sorte que l'alphabet obtenu soit à l'envers. La première lettre est remplacée par la dernière, la deuxième par l'avant-dernière, et ainsi de suite.
Un chiffre d'Atbash pour l'alphabet latin serait le suivant :
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
C'est un chiffre très faible, car il ne possède qu'une seule clé possible, et c'est un simple chiffre de substitution mono-alphabétique. Cela dit, ce n'était peut-être pas un problème à l'époque de ce chiffre.
Le texte chiffré est écrit par groupes de longueur fixe, la taille traditionnelle d'un groupe étant de 5 lettres, les chiffres restant inchangés, et la ponctuation étant exclue. Cela permet de rendre plus difficile la déduction à partir des limites de mots. Tout le texte sera encodé en lettres minuscules.
test donne gvhg
x123 yes donne c123b vh
gvhg donne test
gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt donne thequickbrownfoxjumpsoverthelazydog
Tu dois implémenter les fonctions decode et encode, qui décodent et encodent une String à l'aide d'un chiffrement Atbash.
Tu peux utiliser la signature fournie si tu as un doute sur les types, mais ne la laisse pas brider ta créativité.
Cet exercice manipule des données textuelles. Pour des raisons historiques, le type String de Haskell est synonyme de [Char], un tableau de caractères. Pour manipuler plus efficacement des données textuelles, on peut utiliser le type Text.
Comme prolongement facultatif à cet exercice, tu peux
- text à ta liste de dépendances dans package.yaml.Data.Text de la manière suivante :import qualified Data.Text as T
import Data.Text (Text)
Text, par exemple decode :: Text -> Text, et désigner les combinateurs de Data.Text comme par exemple T.pack.Data.Text.String par Text dans Atbash.hs, c'est-à-dire :decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
Cette partie est entièrement facultative.
Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.