Introdução
Neste desafio, você resolverá as transformações diagonais de Burrows-Wheeler. Aqui está uma visão geral do que é uma transformação diagonal de Burrows-Wheeler. Para codificar uma mensagem, primeiro você deve garantir que ela tenha um comprimento ímpar (por exemplo, 5, 7, 9 etc.). Então você faz uma grade, n
por n
, onde n
é o comprimento da mensagem. A primeira linha é a mensagem original. Cada linha seguinte é a linha acima dela, mas mudou 1 caractere para a esquerda, com o primeiro caractere movendo-se para trás. Por exemplo:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Em seguida, você pega cada letra da diagonal NW para SE e a coloca em uma nova string:
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
Sua mensagem codificada é HloWrdel ol
. Para decodificar, primeiro pegue o tamanho da mensagem codificada, adicione 1 e divida por 2. Vamos ligar para esse número x
. Agora que sabemos x
, começando na primeira letra, cada letra é x
a última, dando a volta. Por exemplo:
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
Agora basta reorganizar as letras na ordem correta para obter Hello World
!
Desafio
Seu desafio é escrever dois programas, funções ou um de cada. No entanto, ambos devem usar o mesmo idioma. O primeiro programa aceitará uma string como entrada via STDIN, argumentos do programa ou parâmetros de função e a codificará usando esse método. O segundo programa aceitará uma string como entrada via STDIN, argumentos do programa ou parâmetros de função e a decodificará usando esse método.
Exigências
Primeiro Programa / Função
- Uma entrada de sequência única usando qualquer método listado acima.
- Deve codificar a sequência usando um estilo de transformação diagonal Burrows-Wheeler.
Segundo Programa / Função
- Uma entrada de sequência única usando qualquer método listado acima.
- É necessário decodificar a sequência usando um estilo de transformação diagonal Burrows-Wheeler.
Restrições
- Você não pode usar nenhuma função interna ou externa que realize esta tarefa.
- As brechas padrão não são permitidas.
- Ambos os programas / funções devem estar no mesmo idioma.
Pontuação
Este é um código de golfe, e o programa mais curto em bytes vence.
Se precisar adicionar mais informações, deixe um comentário!