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, npor n, donde nestá 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 xposterior 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!