Vigenère 암호는 기본적으로 키에 따라 여러 시저 암호 중 하나를인가하는 간단한 다중 문자 암호이다. 기본적으로 키의 문자는 사용할 시프트 된 알파벳을 나타냅니다. 이를 위해 Vigenère 광장 이라는 간단한 도구가있었습니다 .
여기서 각 행은 키의 해당 문자로 시작하는 별도의 알파벳입니다. 그런 다음 열은 암호 문자를 결정하는 데 사용됩니다. 암호 해독은 거의 같은 방식으로 작동하며 그 반대의 경우도 마찬가지입니다.
문자열을 암호화하려고한다고 가정하자 CODEGOLF
. 우리는 또한 열쇠가 필요합니다. 이 경우 키는이어야한다 FOOBAR
. 키가 평문보다 짧은 경우 반복하여 확장하므로 실제 사용하는 키는입니다 FOOBARFO
. 이제 F
알파벳을 찾는 키의 첫 글자 를 찾습니다. 아마 의심 할 여지없이로 시작합니다 F
. 이제 우리는 평문의 첫 글자가있는 열을 찾고 결과 글자는 H
입니다. 두 번째 문자는 O
키 문자와 일반 텍스트 문자로 표시됩니다 C
. 그런 식으로 계속 우리는 마침내 얻는다 HCRFGFQT
.
태스크
당신의 임무는 이제 열쇠가 주어진 메시지를 해독하는 것입니다. 그러나 우리는 16 세기를 넘어서서 컴퓨터를 가지고 있기 때문에 최소한 약간 더 큰 알파벳을 지원해야합니다
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
Vigenère 광장의 구성은 여전히 매우 동일하며 암호는 여전히 똑같은 방식으로 작동합니다. 여기에 전체를 제공하는 것은 조금 까다 롭습니다.
입력
입력은 표준 입력에서 두 개의 개별 텍스트 줄로 제공되며 각각 줄 바꿈으로 종료됩니다. 첫 번째 줄에는 키가 있고 두 번째 줄에는 암호문이 있습니다.
산출
해독 된 메시지를 포함하는 단일 행.
승리 조건
암호화는 때때로 무기로 간주되기 때문에 밀수를 쉽게하기 위해 코드가 짧아야합니다. 발견 가능성을 줄이므로 짧을수록 좋습니다.
샘플 입력 1
Key
miQ2eEO
샘플 출력 1
Message
샘플 입력 2
ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu
샘플 출력 2
ThisWorksEquallyWellWithNumbers123894576
일주일이 지났습니다. 현재 가장 짧은 솔루션이 승인되었습니다. 컨테스트에 관심이있는 분들을 위해 다음과 같은 제출 및 길이가있었습니다.
130 – Python
146 – Haskell
195 – C
197 – C
267 – VB.NET
그리고 다른 솔루션과 비교되지 않은 자체 솔루션 :
108 – Ruby
139 – PowerShell