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にあります。私はそれをテストしましたが、実装にバグがある可能性があります(テストケースが間違っている可能性が高いことを意味します)。
*これを可能な限り正確にしようとしましたが、マシン間のばらつきにより、詳細が間違っている場合があります。ただし、あなたの仕事は、たとえ私が不正確であっても、私が説明したことを実装することです。簡単にするためにプラグボードは含めません