Wprowadzenie
W tym wyzwaniu rozwiążesz przekątne transformacje Burrows-Wheeler. Oto ogólny przegląd tego, czym jest przekątna transformata Burrowsa-Wheelera. Aby zakodować wiadomość, musisz najpierw zagwarantować, że ma ona nieparzystą długość (tj. 5, 7, 9 itd.). Następnie należy wykonać siatkę, n
przez n
, gdzie n
jest długością wiadomości. Pierwszy wiersz to oryginalna wiadomość. Każdy rząd po nim jest rzędem nad nim, ale przesunął 1 znak w lewo, a pierwszy znak przesuwa się do tyłu. Na przykład:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Następnie weź każdą literę na przekątnej NW do SE i umieść ją w nowym ciągu:
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
Twoja zakodowana wiadomość to HloWrdel ol
. Aby zdekodować, najpierw weź długość zakodowanej wiadomości, dodaj 1 i podziel przez 2. Zadzwoń pod ten numer x
. Teraz, gdy wiemy x
, zaczynając od pierwszej litery, każda litera jest x
za ostatnią, zapętlając się. Na przykład:
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
Teraz wystarczy zmienić kolejność liter we właściwej kolejności, aby uzyskać Hello World
!
Wyzwanie
Wyzwanie polega na napisaniu dwóch programów, funkcji lub jednego z nich. Jednak oba muszą używać tego samego języka. Pierwszy program zaakceptuje ciąg jako dane wejściowe przez STDIN, argumenty programu lub parametry funkcji i zakoduje go przy użyciu tej metody. Drugi program zaakceptuje ciąg jako dane wejściowe przez STDIN, argumenty programu lub parametry funkcji i zdekoduje go przy użyciu tej metody.
Wymagania
Pierwszy program / funkcja
- Pojedynczy ciąg wejściowy przy użyciu dowolnej metody wymienionej powyżej.
- Należy zakodować ciąg przy użyciu ukośnego stylu transformacji Burrows-Wheeler.
Drugi program / funkcja
- Pojedynczy ciąg wejściowy przy użyciu dowolnej metody wymienionej powyżej.
- Należy zdekodować ciąg przy użyciu ukośnego stylu transformacji Burrows-Wheeler.
Ograniczenia
- Nie można używać żadnych wbudowanych ani zewnętrznych funkcji, które realizują to zadanie.
- Standardowe luki są niedozwolone.
- Oba programy / funkcje muszą być w tym samym języku.
Punktacja
To jest kod golfowy, więc wygrywa najkrótszy program w bajtach .
Jeśli muszę dodać więcej informacji, zostaw komentarz!