Einführung
In dieser Herausforderung lösen Sie diagonale Burrows-Wheeler-Transformationen. Hier ist ein allgemeiner Überblick darüber, was eine diagonale Burrows-Wheeler-Transformation ist. Um eine Nachricht zu codieren, müssen Sie zuerst sicherstellen, dass sie ungerade ist (dh 5, 7, 9 usw.). Dann sind Sie ein Gitter bilden, n
durch n
, wobei n
die Länge der Nachricht ist. Die erste Zeile ist die ursprüngliche Nachricht. Jede Zeile danach ist die Zeile darüber, hat jedoch 1 Zeichen nach links verschoben, wobei sich das erste Zeichen nach hinten bewegt. Beispielsweise:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Dann nehmen Sie jeden Buchstaben in der Diagonale von NW nach SE und fügen ihn in eine neue Zeichenfolge ein:
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
Ihre verschlüsselte Nachricht lautet HloWrdel ol
. Um zu dekodieren, nehmen Sie zuerst die Länge der codierten Nachricht, addieren Sie 1 und dividieren Sie durch 2. Rufen Sie diese Nummer an x
. Jetzt, da wir wissen x
, beginnend mit dem ersten Buchstaben, ist jeder Buchstabe x
nach dem letzten eine Schleife. Beispielsweise:
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
Ordnen Sie jetzt einfach die Buchstaben in der richtigen Reihenfolge um Hello World
!
Herausforderung
Ihre Herausforderung besteht darin, entweder zwei Programme, Funktionen oder jeweils eines zu schreiben. Beide müssen jedoch dieselbe Sprache verwenden. Das erste Programm akzeptiert eine Zeichenfolge als Eingabe über STDIN, Programmargumente oder Funktionsparameter und codiert sie mit dieser Methode. Das zweite Programm akzeptiert eine Zeichenfolge als Eingabe über STDIN, Programmargumente oder Funktionsparameter und decodiert sie mit dieser Methode.
Bedarf
Erstes Programm / Funktion
- Eine einzelne Zeichenfolgeneingabe mit einer der oben aufgeführten Methoden.
- Die Zeichenfolge muss mit einem diagonalen Burrows-Wheeler-Transformationsstil codiert werden.
Zweites Programm / Funktion
- Eine einzelne Zeichenfolgeneingabe mit einer der oben aufgeführten Methoden.
- Die Zeichenfolge muss mit einem diagonalen Burrows-Wheeler-Transformationsstil dekodiert werden.
Einschränkungen
- Sie können keine integrierten oder externen Funktionen verwenden, die diese Aufgabe ausführen.
- Standardlücken sind nicht erlaubt.
- Beide Programme / Funktionen müssen in derselben Sprache sein.
Wertung
Dies ist Code Golf, also gewinnt das kürzeste Programm in Bytes .
Wenn ich weitere Informationen hinzufügen muss, hinterlasse einen Kommentar!