introduction
Dans ce défi, vous allez résoudre des transformations diagonales Burrows-Wheeler. Voici un aperçu général de ce qu'est une transformation diagonale de Burrows-Wheeler. Pour encoder un message, vous devez d'abord garantir qu'il est de longueur impaire (c'est-à-dire 5, 7, 9, etc.). Ensuite, vous créez une grille, n
par n
, où n
est la longueur du message. La première ligne est le message d'origine. Chaque ligne après cela est la ligne au-dessus, mais décalée d'un caractère vers la gauche avec le premier caractère se déplaçant vers l'arrière. Par exemple:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Ensuite, vous prenez chaque lettre sur la diagonale NW à SE et la mettez dans une nouvelle chaîne:
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
Votre message encodé est HloWrdel ol
. Pour décoder, prenez d'abord la longueur du message codé, ajoutez 1 et divisez par 2. Appelons ce numéro x
. Maintenant que nous savons x
, en commençant par la première lettre, chaque lettre est x
après la dernière, en boucle. Par exemple:
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
Maintenant, réorganisez simplement les lettres dans le bon ordre pour les obtenir Hello World
!
Défi
Votre défi consiste à écrire soit deux programmes, des fonctions, soit un de chacun. Cependant, les deux doivent utiliser la même langue. Le premier programme acceptera une chaîne en entrée via STDIN, des arguments de programme ou des paramètres de fonction et la codera en utilisant cette méthode. Le deuxième programme acceptera une chaîne en entrée via STDIN, des arguments de programme ou des paramètres de fonction et la décodera en utilisant cette méthode.
Exigences
Premier programme / fonction
- Une entrée de chaîne unique à l'aide de l'une des méthodes répertoriées ci-dessus.
- Doit coder la chaîne en utilisant un style de transformation diagonale Burrows-Wheeler.
Deuxième programme / fonction
- Une entrée de chaîne unique à l'aide de l'une des méthodes répertoriées ci-dessus.
- Doit décoder la chaîne en utilisant un style de transformation diagonale Burrows-Wheeler.
Contraintes
- Vous ne pouvez pas utiliser de fonctions intégrées ou externes pour accomplir cette tâche.
- Les échappatoires standard ne sont pas autorisées.
- Les deux programmes / fonctions doivent être dans la même langue.
Notation
C'est le golf de code, donc le programme le plus court en octets gagne.
Si j'ai besoin d'ajouter plus d'informations, laissez un commentaire!