Crea un'implementazione del cifrario rotazionale, talvolta chiamato anche cifrario di Cesare.
Il cifrario di Cesare è un semplice cifrario a scorrimento che si basa sul trasporre tutte le lettere dell'alfabeto usando una chiave intera compresa tra 0 e 26.
Usare una chiave di 0 o 26 produrrà sempre lo stesso output per via dell'aritmetica modulare.
La lettera viene spostata di tanti valori quant'è il valore della chiave.
La notazione generale per i cifrari rotazionali è ROT + <key>.
Il cifrario rotazionale più usato è ROT13.
Un ROT13 sull'alfabeto latino sarebbe il seguente:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm
È più forte del cifrario Atbash perché ha 27 chiavi possibili e 25 chiavi utilizzabili.
Il testo cifrato è scritto con la stessa formattazione dell'input, inclusi spazi e punteggiatura.
omg dà trl
c dà c
Cool dà Cool
The quick brown fox jumps over the lazy dog. dà Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
Gur dhvpx oebja sbk whzcf bire gur ynml qbt. dà The quick brown fox jumps over the lazy dog.
Devi implementare la funzione rotate, che accetta un Int e una String, per poi codificarli usando un cifrario a rotazione.
Puoi usare la firma fornita se non sei sicuro dei 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], una lista 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 alla lista delle dipendenze in package.yaml.Data.Text in questo
modo:import qualified Data.Text as T
import Data.Text (Text)
Text, ad esempio rotate :: Int -> Text -> Text, e riferirti
ai combinatori di Data.Text come, ad esempio, T.pack.Data.Text.String con Text in RotationalCipher.hs, cioè:rotate :: Int -> Text -> Text
Questa parte è del tutto facoltativa.
Iscriviti a Exercism per imparare e padroneggiare Haskell con 107 esercizi e il mentoring di persone reali, tutto gratis.