Napisz program, który pobiera dwa wiersze danych wejściowych i używa pierwszego jako frazy kluczowej do szyfrowania drugiego zgodnie z techniką szyfrowania Playfair.
Wikipedia szczegółowo opisuje szyfrowanie Playfair , ale aby uniknąć niejasności, oto krótkie podsumowanie:
1. Wygeneruj tabelę kluczy:
Zamień wszystkie wystąpienia J
frazy kluczowej na I
, a następnie usuń wszystkie znaki niebędące alfabetami i powtarzające się znaki. Wstaw do tabeli szyfrowania 5 × 5, wypełniając pozostałe komórki resztą alfabetu (poza tym J
, że nam się nie podoba J
).
Przykład:
S T A C K
O V E R F
Stack Overflow --> STACKOVERFLW --> L W B D G
H I M N P
Q U X Y Z
2. Przygotuj wiadomość do zaszyfrowania
Zamień każdy J
na I
, usuń wszystkie znaki niebędące alfabetami i podziel na pary, używając do, X
aby rozbić dowolne pary zawierające tę samą literę dwa razy. Jeśli skończy się nieparzysta liczba liter, dodaj X
na końcu. (Uwaga: Cyfry muszą być pisane w całości - ONE
, TWO
, THREE
, itd. - ale można założyć, to już zostało zrobione przez Ciebie).
Przykład:
In:
The cat crept into the crypt, crapped, and crept out again.
Out:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
3. Szyfrowanie
Zaszyfruj kolejno każdą parę liter. Jeśli są w różnych wierszach i kolumnach tabeli kluczy, zastąp każdą literą z tego samego wiersza w kolumnie, w której znajduje się druga litera (np. VM
⇒ EI
, LZ
⇒ GQ
). Jeśli są w tym samym rzędzie (lub kolumnie), wybierz dwa znaki bezpośrednio po prawej stronie (lub poniżej), owijając się w razie potrzeby (np. OE
⇒ VR
, ZG
⇒ KP
).
Przykład:
In:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
Out:
SI RA CA RD FM VU IC VS MO RD ZN AK EC MZ MF BC YN RD FM SV TV KB TM MY
Ciąg wygenerowany przez ten proces to zaszyfrowana wiadomość, którą program powinien wypisać.
Zasady:
- Tekst wejściowy i klucz można uzyskać z
stdin
argumentów wiersza poleceń lub innych takich źródeł. Zakodowane wejście jest niedozwolone. - Twój program musi akceptować zarówno wielkie, jak i małe litery dla hasła i wiadomości.
- Zaszyfrowane dane wyjściowe mogą być pisane wielkimi lub małymi literami.
- Twój program powinien akceptować frazy kluczowe o długości co najmniej 64 znaków i teksty wiadomości o wielkości co najmniej 16 KB.
- Nie musisz obsługiwać danych wejściowych innych niż ASCII.
- Możesz zignorować możliwość wystąpienia pary liter
XX
podczas szyfrowania. - Nie ma potrzeby dodawania białych znaków do danych wyjściowych programu.
- Twoja odpowiedź powinna zawierać przykład wiadomości, frazy kluczowej i zaszyfrowanego wyjścia wygenerowanego przez Twój program.
- Jest to wyzwanie dla golfa kodowego, więc wygra odpowiedź z najkrótszym kodem (w bajtach).
UWAGA: Należy pamiętać, że kolejne litery należy łamać tylko wtedy, gdy występują w tej samej parze . Na przykład
MASSACHUSETTS
należy zaszyfrować jakoMA SX SA CH US ET TS
- podwójneS
musi być podzielone, ale podwójneT
nie.
J
” Czy żywisz podobne sentymenty do APL?