Track
/
Haskell
Haskell
/
Esercizi
/
Cifrario a rotazione
Cifrario a rotazione

Cifrario a rotazione

Medio

Istruzioni

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.

Esempi

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

Suggerimenti

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

  • leggere qualcosa sui tipi di stringa in Haskell.
  • aggiungere - text alla lista delle dipendenze in package.yaml.
  • importare Data.Text in questo modo:
import qualified Data.Text as T
import           Data.Text (Text)
  • usare il tipo Text, ad esempio rotate :: Int -> Text -> Text, e riferirti ai combinatori di Data.Text come, ad esempio, T.pack.
  • consultare la documentazione di Data.Text.
  • sostituire tutte le occorrenze di String con Text in RotationalCipher.hs, cioè:
rotate :: Int -> Text -> Text

Questa parte è del tutto facoltativa.


Fonte

WikipediaIl link si apre in una nuova finestra o scheda
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Haskell Exercism

Vuoi iniziare Cifrario a rotazione?

Iscriviti a Exercism per imparare e padroneggiare Haskell con 107 esercizi e il mentoring di persone reali, tutto gratis.