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.
test da gvhg
x123 yes da c123b vh
gvhg da test
gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt da thequickbrownfoxjumpsoverthelazydog
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
- text a tu lista de dependencias en package.yaml.Data.Text de la siguiente
manera:import qualified Data.Text as T
import Data.Text (Text)
Text, por ejemplo decode :: Text -> Text, y referirte a los
combinadores de Data.Text como, por ejemplo, T.pack.Data.Text.String por Text en Atbash.hs, es decir:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
Esta parte es totalmente opcional.
Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.