Wprowadzenie:
Mam mnóstwo różnych szyfrów przechowywanych w dokumencie, który kiedyś skompilowałem jako dziecko, wybrałem kilka z tych, które moim zdaniem najlepiej nadawały się na wyzwania (niezbyt trywialne i niezbyt trudne) i przekształciłem je w wyzwania. Większość z nich wciąż znajduje się w piaskownicy i nie jestem jeszcze pewien, czy opublikuję je wszystkie, czy tylko kilka. Oto drugi ( Szyfr komputerowy był pierwszym, który opublikowałem).
W przypadku szyfru Trifid (bez użycia słowa kluczowego) alfabet (i dodatkowa karta zastępcza) jest podzielona na trzy tabele 3 na 3:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
Tekst, który chcemy zaszyfrować, jest pierwszym znakiem po znaku zakodowanym w numerach tabeli-wiersza-kolumny. Na przykład tekst this is a trifid cipher
staje się:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
Następnie umieszczamy wszystko po sobie wiersz po wierszu w powyższej tabeli w grupach po trzy:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
A te są przekształcane z powrotem w postaci przy użyciu tych samych tabel:
s y y z a g d d y y u i q u z w u u h u y o
Należy zauważyć, że długość wejściowa powinna być coprime do 3. Więc jeśli długość jest wielokrotnością 3, dodajemy jedną lub dwie końcowe spacje, aby długość wejściowa nie była wielokrotnością 3.
Wyzwanie:
Biorąc pod uwagę ciąg sentence_to_encipher
, szyfruj go jak opisano powyżej.
Musisz tylko wyszyfrować dane sentence_to_encipher
, więc nie ma potrzeby tworzenia programu / funkcji odszyfrowującej. Mogę jednak w przyszłości podjąć wyzwanie z części 2 dla odszyfrowania (chociaż mam wrażenie, że jest to trywialne / podobne do procesu szyfrowania).
Zasady konkursu:
- Możesz założyć, że
sentence_to_encipher
będą zawierać tylko litery i spacje. - Możesz użyć zarówno wielkich, jak i wielkich liter (podaj, którego użyłeś w odpowiedzi).
- Możesz dodać jedną lub dwie spacje końcowe, gdy długość wejściowa wynosi 3, aby nie była już wielokrotnością 3.
- I / O jest elastyczny. Zarówno dane wejściowe, jak i wyjściowe mogą być łańcuchem, listą / tablicą / strumieniem znaków itp.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)