Tracks
/
Haskell
Haskell
/
Ejercicios
/
Cifrado Atbash
Cifrado Atbash

Cifrado Atbash

Intermedia

Instrucciones

Crea una implementación del cifrado Atbash, un antiguo sistema de cifrado creado en Oriente Medio.

El cifrado Atbash es un cifrado de sustitución simple que se basa en invertir todas las letras del alfabeto, de modo que el alfabeto resultante quede al revés. La primera letra se reemplaza por la última, la segunda por la penúltima, y así sucesivamente.

Un cifrado Atbash para el alfabeto latino sería el siguiente:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba

Es un cifrado muy débil porque solo tiene una clave posible y es un cifrado de sustitución monoalfabético simple. Sin embargo, es posible que esto no fuera un problema en la época del cifrado.

El texto cifrado se escribe en grupos de longitud fija, siendo el tamaño de grupo tradicional de 5 letras; los números se dejan sin cambios y la puntuación se excluye. Esto es para que sea más difícil adivinar a partir de los límites entre palabras. Todo el texto se codificará como letras minúsculas.

Ejemplos

  • Codificar test da gvhg
  • Codificar x123 yes da c123b vh
  • Decodificar gvhg da test
  • Decodificar gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt da thequickbrownfoxjumpsoverthelazydog

Pistas

Necesitas implementar las funciones decode y encode, que decodifican y codifican un String usando un cifrado Atbash. Puedes usar la firma que te proporcionamos si tienes dudas sobre los tipos, pero no dejes que eso limite tu creatividad.

Este ejercicio trabaja con datos textuales. Por razones históricas, el tipo String de Haskell es sinónimo de [Char], una lista de caracteres. Para un manejo más eficiente de datos textuales, se puede usar el tipo Text.

Como extensión opcional de este ejercicio, puedes

import qualified Data.Text as T
import           Data.Text (Text)
  • usar el tipo Text, por ejemplo decode :: Text -> Text, y referirte a los combinadores de Data.Text como, por ejemplo, T.pack.
  • buscar la documentación de Data.Text.
  • reemplazar todas las apariciones de String por Text en Atbash.hs, es decir:
decode :: Text -> Text
decode cipherText = ...

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

Esta parte es totalmente opcional.


Fuente

WikipediaEl enlace se abre en una ventana o pestaña nueva
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Haskell Exercism

¿Todo listo para empezar Cifrado Atbash?

Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.