Implementa la codificación y la decodificación del cifrado de valla.
El cifrado de valla es una forma de cifrado por transposición que recibe su nombre de la manera en que se codifica. Ya lo usaban los antiguos griegos.
En el cifrado de valla, el mensaje se escribe hacia abajo sobre los sucesivos «carriles» de una valla imaginaria, y luego se sube al llegar al fondo (como un zigzag). Finalmente, el mensaje se lee por filas.
Por ejemplo, con tres «carriles» y el mensaje «WE ARE DISCOVERED FLEE AT ONCE», quien cifra escribe:
W . . . E . . . C . . . R . . . L . . . T . . . E
. E . R . D . S . O . E . E . F . E . A . O . C .
. . A . . . I . . . V . . . D . . . E . . . N . .
Y después se lee:
WECRLTEERDSOEEFEAOCAIVDEN
Para descifrar un mensaje, tomas la forma en zigzag y rellenas el texto cifrado a lo largo de las filas.
? . . . ? . . . ? . . . ? . . . ? . . . ? . . . ?
. ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? .
. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .
La primera fila tiene siete lugares que se pueden rellenar con «WECRLTE».
W . . . E . . . C . . . R . . . L . . . T . . . E
. ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? .
. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .
Ahora la segunda fila toma «ERDSOEEFEAOC».
W . . . E . . . C . . . R . . . L . . . T . . . E
. E . R . D . S . O . E . E . F . E . A . O . C .
. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .
Y deja «AIVDEN» para la última fila.
W . . . E . . . C . . . R . . . L . . . T . . . E
. E . R . D . S . O . E . E . F . E . A . O . C .
. . A . . . I . . . V . . . D . . . E . . . N . .
Si ahora lees a lo largo de la forma en zigzag, puedes leer el mensaje original.
Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.