Enigmaマシンは、ドイツ人などがメッセージを暗号化するために使用するかなり複雑な暗号マシンです。このマシンを実装するのはあなたの仕事です*。
ステップ1、回転
エニグママシンには、ローター用に3つのスロットがあり、これらの各スロットに5つの使用可能なローターがあります。各ローターには、26の異なる位置(A
〜Z
)があります。各ローターには、事前定義されたノッチ位置があります。
Rotor Notch
------------
1 Q
2 E
3 V
4 J
5 Z
キーを押すと、次の手順が発生します。
- スロット1のローターが回転します
- スロット1のローターがノッチを通過すると、スロット2のローターが回転します。
- スロット2のローターがそのノッチにある場合(ただし、そこに移動しただけではない場合)、ローター2と3の両方が1回転します。
私たちはローター1,3,5を使用していて、彼らは位置にある場合はP,U,H
、その後位置の順序は次のとおりです。P,U,H
> Q,U,H
> R,V,H
>S,W,I
ステップ2、置換
各ローターは、単純な文字置換を実行します。以下は、A
位置にある各ローターのチャートです。
ABCDEFGHIJKLMNOPQRSTUVWXYZ
--------------------------
1 EKMFLGDQVZNTOWYHXUSPAIBRCJ
2 AJDKSIRUXBLHWTMCQGZNPYFVOE
3 BDFHJLCPRTXVZNYEIWGAKMUSQO
4 ESOVPZJAYQUIRHXLNFTGKDCMWB
5 VZBRGITYUPSDNHLXAWMJQOFECK
R YRUHQSLDPXNGOKMIEBFZCWVJAT
位置Tのローター1はPAIBRCJEKMFLGDQVZNTOWYHXUS
、の代わりに文字C
を使用しI
ます。
3つのローターが置換を実行した後、リフレクターがヒットします(R
上記のリストにあります)。独自の置換を実行し、信号をローターに反映します。次に、ローターは逆の順序で逆置換を実行します。
代わりに、1個の置換ロータの逆置換手段A
とE
、それは代入しE
てA
スロットには、すべての位置にあるローター1、2、3が充填されていA
ます。手紙はローターを通るQ
経路Q>X>V>M
をたどります。 M
に反映しO
、それはの逆経路をたどるO>Z>S>S
。したがって、A
はに置き換えられS
ます。
入出力
合格しました:
- 3つのローターのリスト(整数として)
- 3つの開始ローター位置のリスト(文字として)
- 暗号化する必要がある文字列。
入力は整形式で、すべての文字はスペースでなく大文字であると想定できます。
暗号化された文字列を返す必要があります。
オプションで、入力としてローター、ノッチ、およびリフレクターを受け入れることができます。以下のように、スコアから95バイトを取得できない場合95 = ceil(log2(26 letters ^(26*6 rotors +5 notches))/8 bytes)
テストケース
Rotor Position Input Output
4,1,5 H,P,G AAAAAAAAA RPWKMBZLN
1,2,3 A,A,A PROGRAMMINGPUZZLES RTFKHDOVZSXTRMVPFC
1,2,3 A,A,A RTFKHDOVZSXTRMVPFC PROGRAMMINGPUZZLES
2,5,3 U,L,I GIBDZNJLGXZ UNCRACKABLE
私の実装はGithubにあります。私はそれをテストしましたが、実装にバグがある可能性があります(テストケースが間違っている可能性が高いことを意味します)。
*これを可能な限り正確にしようとしましたが、マシン間のばらつきにより、詳細が間違っている場合があります。ただし、あなたの仕事は、たとえ私が不正確であっても、私が説明したことを実装することです。簡単にするためにプラグボードは含めません