Parcours
/
Haskell
Haskell
/
Exercices
/
Chiffre rotatif
Chiffre rotatif

Chiffre rotatif

Moyen

Instructions

Crée une implémentation du chiffrement rotatif, parfois aussi appelé chiffre de César.

Le chiffre de César est un chiffrement par décalage simple qui repose sur la transposition de toutes les lettres de l'alphabet à l'aide d'une clé entière comprise entre 0 et 26. Utiliser une clé de 0 ou de 26 donne toujours le même résultat, en raison de l'arithmétique modulaire. Chaque lettre est décalée d'autant de valeurs que la valeur de la clé.

La notation générale des chiffrements rotatifs est ROT + <key>. Le chiffrement rotatif le plus couramment utilisé est ROT13.

Un ROT13 sur l'alphabet latin se présente comme suit :

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm

Il est plus robuste que le chiffre Atbash, car il offre 27 clés possibles, dont 25 utilisables.

Le texte chiffré est écrit avec la même mise en forme que l'entrée, y compris les espaces et la ponctuation.

Exemples

  • ROT5 omg donne trl
  • ROT0 c donne c
  • ROT26 Cool donne Cool
  • ROT13 The quick brown fox jumps over the lazy dog. donne Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
  • ROT13 Gur dhvpx oebja sbk whzcf bire gur ynml qbt. donne The quick brown fox jumps over the lazy dog.

Indices

Tu dois implémenter la fonction rotate, qui prend un Int et une String, puis l'encode à l'aide d'un chiffrement par rotation. Tu peux utiliser la signature fournie si tu as un doute sur les types, mais ne la laisse pas restreindre ta créativité.

Cet exercice travaille sur des données textuelles. Pour des raisons historiques, le type String de Haskell est synonyme de [Char], une liste de caractères. Pour manipuler les données textuelles plus efficacement, on peut utiliser le type Text.

Pour prolonger cet exercice de façon facultative, tu peux

import qualified Data.Text as T
import           Data.Text (Text)
  • utiliser le type Text, par exemple rotate :: Int -> Text -> Text, et faire appel aux combinateurs de Data.Text comme, par exemple, T.pack.
  • consulter la documentation de Data.Text.
  • remplacer toutes les occurrences de String par Text dans RotationalCipher.hs, c'est-à-dire :
rotate :: Int -> Text -> Text

Cette partie est entièrement facultative.


Source

WikipediaLe lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Haskell Exercism

Prêt à commencer Chiffre rotatif ?

Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.