Rutas
/
Haskell
Haskell
/
Ejercicios
/
Cifrado Atbash
Cifrado Atbash

Cifrado Atbash

Media

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 el orden de todas las letras del alfabeto, de modo que el alfabeto resultante queda al revés. La primera letra se sustituye 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 supusiera un problema en la época del cifrado.

El texto cifrado se escribe en grupos de longitud fija, siendo el tamaño de grupo tradicional 5 letras; los números se dejan sin cambios y la puntuación se excluye. Esto sirve para que sea más difícil adivinar cosas basándose en los límites entre palabras. Todo el texto se codificará en 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 proporcionada si no estás seguro de los tipos, pero no dejes que restrinja 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 tratamiento más eficiente de datos textuales, se puede usar el tipo Text.

Como extensión opcional a 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.
  • consultar 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 nueva ventana o pestaña
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Haskell Exercism

¿Listo para empezar Cifrado Atbash?

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