バックグラウンド
100年と13年前、アマチュア暗号学者のフェリックス・デラステッレは、25字のアルファベットの2つの順列をキーとして受け入れ、それらの文字で構成されるメッセージをエンコードする4乗暗号に関する研究を発表しました。
ほとんどのペンと紙の暗号と同様に、4平方暗号は現在暗号的な価値を持ちませんが、発明の時点では、モノグラフの暗号よりも大きな利点がありました。
100年後、13年後、アリス・デラステッレは、アルファベットのサイズとキーの数を増やすことで4平方暗号を改善することにしました。[引用が必要]
キー設定
アルファベットには次の文字が含まれます(スペースで始まる):
!"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
パスフレーズを指定すると、次のようにこのアルファベットの順列を作成します。
各文字の最初の出現のみを保持します。
アルファベットの未使用文字を自然な順序で追加します。
4つのパスフレーズを4つのキーに変換した後、各キーを辺の長さ7の正方形に分割し、結果の4つの正方形を配置して1つの大きな正方形を形成します。
たとえば、パスフレーズが
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."]
各文字ペアについて、最初の正方形(読み取り順序)の最初の文字と、4番目の2番目の文字を見つけます。
次に、選択した4つの文字が四角形を形成し、その辺が正方形の辺に平行になるように、残りの正方形の文字を選択します。
最後に、文字ペアを2番目と3番目の正方形の選択した文字に置き換えます。
この例の文字列では、これにより
["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]
次の暗号文が生成されます。
PPA@E YTZEEH=T<-
仕事
4つのパスフレーズとプレーンテキストを受け入れ、上記の4乗暗号のバリアントを使用して暗号化し、結果の暗号テキストを返すプログラムまたは関数を作成します。
詳細:
5つの入力文字列は、前述のアルファベットの文字のみで構成されます。
5つの入力文字列は、改行で区切られた単一の文字列、または5つの文字列の配列として、任意の順序で読み取ることができます。
空の文字列はないとみなすことができます。
出力は単一の文字列でなければなりません。
出力をSTDOUTに印刷することを選択した場合、暗号文の文字と(オプションで)末尾の改行のみを印刷できます。
標準のコードゴルフ規則が適用されます。
テストケース
すべてのテストケースで、最初の4つの文字列は読み取り順のキースクエアに対応し、最後の入力文字列はプレーンテキストに対応しています。
入力
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.