Track
/
Haskell
Haskell
/
Esercizi
/
Cifrario Atbash
Cifrario Atbash

Cifrario Atbash

Medio

Istruzioni

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.

Esempi

  • La codifica di test dà gvhg
  • La codifica di x123 yes dà c123b vh
  • La decodifica di gvhg dà test
  • La decodifica di gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt dà thequickbrownfoxjumpsoverthelazydog

Suggerimenti

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

  • leggere qualcosa sui tipi di stringa in Haskell.
  • aggiungere - text all'elenco 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 decode :: 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 Atbash.hs, cioè:
decode :: Text -> Text
decode cipherText = ...

encode :: Text -> Text
encode plainText = ...

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 Atbash?

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