tło
Sto trzynaście lat temu amatorski kryptograf Félix Delastelle opublikował swoją pracę na czterokwadratowym szyfrze , cyfrowym szyfrze zastępczym, który przyjmuje dwie kombinacje 25-literowego alfabetu jako klucze i koduje wiadomości składające się z tych liter.
Podobnie jak większość szyfrów na papierze długopisowym, czterokwadratowy szyfr nie ma dziś żadnej wartości kryptograficznej, ale w momencie wynalezienia miał znaczącą przewagę nad monograficznymi odpowiednikami.
Sto trzynaście lat później Alice Delastelle postanawia poprawić czterokwadratowy szyfr, zwiększając rozmiar alfabetu i liczbę kluczy. [wymagany cytat]
Konfiguracja klucza
Alfabet zawiera następujące znaki (zaczynające się od spacji):
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
Biorąc pod uwagę hasło, konstruujemy permutację tego alfabetu w następujący sposób:
Zachowaj tylko pierwsze wystąpienie każdej postaci.
Dodaj nieużywane znaki z alfabetu, w ich naturalnej kolejności.
Po przekształceniu czterech fraz hasła w cztery klawisze, dzielimy każdy klawisz na kwadrat o boku długości 7 i układamy cztery wynikowe kwadraty, tak aby tworzyły jeden duży kwadrat.
Na przykład, jeśli frazami hasła były
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
klucze zostaną zbudowane i ułożone w następujący sposób:
PROGAMI POULARI
N UZLES TY CNES
&CDF!"# &DBWG!"
$%'()*+ #$%'()*
,-./:;< +,-./:;
=>?@BHJ <=>?@FH
KQTVWXY JKMQVXZ
CORET H DON'T E
SBAYPL! LV!"#$%
"#$%&'( &()*+,-
)*+,-./ ./:;<=>
:;<=>?@ ?@ABCFG
DFGIJKM HIJKMPQ
NQUVWXZ RSUWXYZ
Szyfrowanie
Biorąc pod uwagę wiadomość tekstową, taką jak
ALICE LOVES BOB.
dodajemy 0 lub 1 spację, aby wyrównać jego długość i dzielimy na pary znaków:
["AL" "IC" "E " "LO" "VE" "S " "BO" "B."]
Dla każdej pary znaków lokalizujemy pierwszą postać na pierwszym kwadracie (kolejność czytania), a drugą na czwartym.
Następnie wybieramy znaki w pozostałych kwadratach, tak aby cztery wybrane znaki tworzyły prostokąt, którego boki są równoległe do boków kwadratów.
Na koniec zamieniamy parę znaków na wybrane znaki drugiego i trzeciego kwadratu.
Dla naszego przykładowego ciągu daje to
["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]
w wyniku czego powstaje następujący tekst zaszyfrowany:
PPA@E YTZEEH=T<-
Zadanie
Napisz program lub funkcję, która akceptuje cztery frazy i tekst jawny, używa powyższego wariantu czterokwadratowego szyfru do jego zaszyfrowania i zwraca wynikowy tekst zaszyfrowany.
Detale:
Pięć ciągów wejściowych będzie się składać wyłącznie ze znaków wspomnianego alfabetu.
Pięć ciągów wejściowych można odczytać w dowolnej kolejności, jako taki, pojedynczy ciąg rozdzielony znakami nowej linii lub jako tablica pięciu ciągów.
Możesz założyć, że żaden z łańcuchów nie jest pusty.
Dane wyjściowe muszą być pojedynczym ciągiem.
Jeśli zdecydujesz się wydrukować wyjście do STDOUT, możesz wydrukować tylko znaki tekstu zaszyfrowanego i (opcjonalnie) końcowy znak nowej linii.
Obowiązują standardowe zasady gry w golfa .
Przypadki testowe
We wszystkich przypadkach testowych pierwsze cztery ciągi odpowiadają kwadratowym klawiszom w kolejności odczytu, a ostatnie ciągi wejściowe w postaci zwykłego tekstu.
Wejście
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ALICE LOVES BOB.
Wynik
PPA@E YTZEEH=T<-
Wejście
!"#$%&'()*+,-./:;<=>
!"#$%&'()*+,-./:;<=>?@ABCDE
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKL
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRS
HELLO, WORLD!
Wynik
LALLR)#TROKE !
Wejście
,'K AB-Q=?@("W$>XM).C#<I:G!OLP*+;SZJTU%NED/&VFHRY
:,-D$C<SU=IYHFVA;! JG/M&L+WT%#.Q@(N*R")EZOBKX?'>P
L()JX,BND?Z<>P*FU%=O@&KIC+A!Y:;$SWHR.EMG'/T"QV #-
<->CI")AP Q:+U;O/F(KH&ER!MW?X'VJLZ#.$,BSGN@TD%*Y=
SPIN THE PPCG WHEEL OF BLAME!
Wynik
#>TE,VK+,ZQ(&<F@RA.NL@DM%NAC&>
Wejście
& %(,-#)$@?/=>'*"<:;!.+
=/$- ?;',@#!(&<")%.:>+*
&%-/<?.;$'#:=!( ,>"+*)@
=,<-*?#.'@/;>%!+:(& ")$
HNRA#JX$H %JAV+"GTS,
Wynik
GOOD LUCK, HAVE FUN.