Фон
Сто тринадцять років тому криптограф-аматор Фелікс Деластел опублікував свою роботу на шифрі з чотирма квадратами, шифром заміщення, що приймає дві перестановки 25-літерного алфавіту як ключі та кодує повідомлення, що складаються з цих літер.
Як і більшість рукописних паперових шифрів, шифр з чотирма квадратами сьогодні не має жодної криптографічної цінності, але на момент свого винаходу він мав значну перевагу перед своїми монографічними аналогами.
Через сто тринадцять років пізніше Еліс Деластель вирішує покращити шифр чотирьох квадратних за рахунок збільшення розміру алфавіту та кількості клавіш. [потрібна цитата]
Налаштування ключів
Алфавіт містить такі символи (починаючи з пробілу):
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
Давши прохідну фразу, ми будуємо перестановку цього алфавіту наступним чином:
Зберігайте лише перше виникнення кожного символу.
Додайте невикористані символи з алфавіту в їх природному порядку.
Перетворивши чотири фразові фрази на чотири клавіші, ми розділимо кожну клавішу на квадрат довжиною сторони 7 і розташуємо чотири отримані квадрати так, щоб вони утворювали один великий квадрат.
Наприклад, якщо пропускні фрази були
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ключі будуть побудовані та розташовані так:
PROGAMI POULARI
N UZLES TY CNES
&CDF!"# &DBWG!"
$%'()*+ #$%'()*
,-./:;< +,-./:;
=>?@BHJ <=>?@FH
KQTVWXY JKMQVXZ
CORET H DON'T E
SBAYPL! LV!"#$%
"#$%&'( &()*+,-
)*+,-./ ./:;<=>
:;<=>?@ ?@ABCFG
DFGIJKM HIJKMPQ
NQUVWXZ RSUWXYZ
Шифрування
Подано в простому тексті повідомлення типу
ALICE LOVES BOB.
ми додаємо пробіли 0 або 1, щоб зробити його довжиною рівною і розділимо на пари символів:
["AL" "IC" "E " "LO" "VE" "S " "BO" "B."]
Для кожної пари символів ми знаходимо перший символ у першому квадраті (порядок читання), а другий - у четвертому.
Потім ми вибираємо символи в решті квадратів таким чином, щоб чотири обрані символи утворювали прямокутник, сторони якого паралельні сторонам квадратів.
Нарешті, замінюємо парну символів вибраними символами другого та третього квадрата.
Для нашого прикладу рядка це дає
["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]
в результаті виходить наступний шифротекст:
PPA@E YTZEEH=T<-
Завдання
Напишіть програму або функцію, яка приймає чотири фрази фрази та простий текст, використовує вищезазначений варіант шифру з чотирма квадратами для його шифрування та повертає отриманий шифротекст.
Деталі:
П'ять вхідних рядків будуть складатися виключно з символів згаданого алфавіту.
П'ять вхідних рядків можна читати в будь-якому порядку, як такий, окремий рядок, обмежений новими рядками, або як масив з п'яти рядків.
Ви можете припустити, що жодна з рядків порожня.
Вихід повинен бути одним рядком.
Якщо ви вирішили надрукувати вихід у STDOUT, ви можете надрукувати лише символи шифротексту та (необов'язково) зворотний новий рядок.
Діють стандартні правила гольф-коду .
Тестові справи
У всіх тестових випадках перші чотири рядки відповідають ключовим квадратам у порядку читання, а останній рядок вводу - до простого тексту.
Вхідні дані
PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ALICE LOVES BOB.
Вихідні дані
PPA@E YTZEEH=T<-
Вхідні дані
!"#$%&'()*+,-./:;<=>
!"#$%&'()*+,-./:;<=>?@ABCDE
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKL
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRS
HELLO, WORLD!
Вихідні дані
LALLR)#TROKE !
Вхідні дані
,'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!
Вихідні дані
#>TE,VK+,ZQ(&<F@RA.NL@DM%NAC&>
Вхідні дані
& %(,-#)$@?/=>'*"<:;!.+
=/$- ?;',@#!(&<")%.:>+*
&%-/<?.;$'#:=!( ,>"+*)@
=,<-*?#.'@/;>%!+:(& ")$
HNRA#JX$H %JAV+"GTS,
Вихідні дані
GOOD LUCK, HAVE FUN.