Introducción
En este desafío, resolverás transformaciones diagonales de Burrows-Wheeler. Aquí hay una descripción general de lo que es una transformación diagonal de Burrows-Wheeler. Para codificar un mensaje, primero debe garantizar que tenga una longitud impar (es decir, 5, 7, 9, etc.). Luego haces una cuadrícula, n
por n
, donde n
está la longitud del mensaje. La primera fila es el mensaje original. Cada fila después de eso es la fila de arriba, pero cambió 1 carácter a la izquierda con el primer carácter moviéndose hacia atrás. Por ejemplo:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Luego, toma cada letra en la diagonal NW a SE y la coloca en una nueva cadena:
Hello World H
ello WorldH l
llo WorldHe o
lo WorldHel W
o WorldHell r
WorldHello d
WorldHello e
orldHello W l
rldHello Wo (space)
ldHello Wor o
dHello Worl l
Su mensaje codificado es HloWrdel ol
. Para decodificar, primero tome la longitud del mensaje codificado, agregue 1 y divida por 2. Llamemos a este número x
. Ahora que sabemos x
, comenzando en la primera letra, cada letra es x
posterior a la última, dando vueltas. Por ejemplo:
H l o W r d e l o l
1
Then...
H l o W r d e l o l
1 2
And again...
H l o W r d e l o l
1 3 2
Until you get...
H l o W r d e l o l
1 3 5 7 9 11 2 4 6 8 10
¡Ahora solo reorganiza las letras en el orden correcto para obtenerlas Hello World
!
Desafío
Su desafío es escribir dos programas, funciones o uno de cada uno. Sin embargo, ambos deben usar el mismo idioma. El primer programa aceptará una cadena como entrada a través de STDIN, argumentos de programa o parámetros de función y la codificará utilizando este método. El segundo programa aceptará una cadena como entrada a través de STDIN, argumentos de programa o parámetros de función y la decodificará utilizando este método.
Requisitos
Primer programa / función
- Una sola entrada de cadena usando cualquier método mencionado anteriormente.
- Debe codificar la cadena utilizando un estilo de transformación diagonal Burrows-Wheeler.
Segundo programa / función
- Una sola entrada de cadena usando cualquier método mencionado anteriormente.
- Debe decodificar la cadena con un estilo de transformación diagonal Burrows-Wheeler.
Restricciones
- No puede utilizar ninguna función incorporada o externa que realice esta tarea.
- Las lagunas estándar no están permitidas.
- Ambos programas / funciones deben estar en el mismo idioma.
Puntuación
Este es el código de golf, por lo que gana el programa más corto en bytes .
Si necesito agregar más información, ¡deja un comentario!