델타 암호(delta cipher)는 매우 단순하면서도 치환 암호보다 크게 개선된 암호화 방식입니다. 알파벳 26개 글자 A–Z에는 각각 0부터 25까지의 숫자 값이 하나씩 배정됩니다. 이 배정은 일대일 대응(글자들의 순열)이며, 반드시 알파벳 순서일 필요는 없습니다. 기본 암호표는 A = 0, B = 1, …, Z = 25로 값을 배정하며, 새로운 유효한 암호표가 주어지기 전까지 사용됩니다.
암호화는 연속한 글자들의 값 차이를 이용합니다.
A가 있는 것으로 간주합니다.A와 a는 같은 글자로 보아 값이 같습니다.복호화는 이 과정을 거꾸로 수행하여 한 글자씩 원래 문자열을 복원합니다.
입력은 한 줄에 하나씩 주어지는 명령들의 나열이며, 파일 끝(EOF)에서 종료됩니다. 어떤 줄도 10000자를 넘지 않습니다. 명령은 세 가지이고, 명령어의 대소문자는 구분하지 않습니다. 각 명령어 뒤에는 적어도 하나의 공백이 옵니다.
ENCRYPT — 줄의 나머지는 현재 암호표로 암호화할 평문입니다.DECRYPT — 줄의 나머지는 현재 암호표로 평문으로 되돌릴 암호문입니다.CIPHER — 줄의 나머지는 새 암호표를 정의합니다. 정확히 26개의 글자가 중복 없이 있어야 하며, 공백과 문장 부호는 무시합니다. 글자들의 순서가 값을 정합니다. 첫 번째 글자의 값은 0, 두 번째는 1, 이런 식으로 이어집니다.첫 단어가 이 세 명령 중 어느 것도 아닌 줄은 이해할 수 없는 명령입니다.
입력의 각 줄마다 한 줄씩 출력합니다. 아래에 보이는 공백은 출력의 일부이며 정확히 그대로 재현해야 합니다. 특히 모든 출력 줄은 공백 한 칸으로 끝납니다.
ENCRYPT와 DECRYPT: RESULT: 다음에 공백 두 칸, 변환된 문자열, 그리고 공백 한 칸을 출력합니다.CIPHER: Good cipher. 다음에 공백 두 칸, Using, 공백 한 칸, 26개의 글자를 대문자로 쓴 것, 그리고 마침표와 공백 한 칸을 출력합니다. 이후 모든 명령은 이 새 암호표를 사용합니다.CIPHER(글자 개수가 틀리거나 글자가 중복된 경우): Bad cipher. 다음에 공백 두 칸, Using default., 그리고 공백 한 칸을 출력하고, 이후에는 기본 암호표를 사용합니다.Command not understood. 다음에 공백 한 칸을 출력합니다.