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,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 에서 찾을 수 있습니다 . 테스트했지만 구현에 버그가있을 수 있습니다 (테스트 사례가 잘못되었을 수 있음).
* 가능한 한 정확하게 작성하려고 시도했지만 기계 간 차이로 인해 세부 사항이 잘못되었을 수 있습니다. 그러나 귀하의 임무는 내가 정확하지 않더라도 내가 설명한 것을 구현하는 것입니다. 단순화를 위해 플러그 보드를 포함하지 않습니다.