트랙
/
Python
Python
/
연습 문제
/
레일 펜스 암호
레일 펜스 암호

레일 펜스 암호

보통

지침

레일 펜스 암호의 인코딩과 디코딩을 구현해요.

레일 펜스 암호는 인코딩하는 방식에서 이름을 따온 전위 암호의 한 종류예요. 고대 그리스인들도 이미 사용했어요.

레일 펜스 암호에서는 상상 속 울타리의 연속된 "레일"을 따라 메시지를 아래로 써 내려가다가, 바닥에 닿으면 다시 위로 올라가요 (지그재그처럼요). 마지막으로 메시지를 행 단위로 읽어요.

예를 들어 "레일" 세 개와 "WE ARE DISCOVERED FLEE AT ONCE"라는 메시지를 사용하면, 암호를 작성하는 사람은 이렇게 써 내려가요:

W . . . E . . . C . . . R . . . L . . . T . . . E
. E . R . D . S . O . E . E . F . E . A . O . C .
. . A . . . I . . . V . . . D . . . E . . . N . .

그런 다음 이렇게 읽어요:

WECRLTEERDSOEEFEAOCAIVDEN

메시지를 복호화하려면 지그재그 모양을 그리고, 각 행을 따라 암호문을 채워 넣어요.

? . . . ? . . . ? . . . ? . . . ? . . . ? . . . ?
. ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? .
. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .

첫 번째 행에는 "WECRLTE"로 채울 수 있는 자리가 일곱 개 있어요.

W . . . E . . . C . . . R . . . L . . . T . . . E
. ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? . ? .
. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .

이제 두 번째 행에는 "ERDSOEEFEAOC"가 들어가요.

W . . . E . . . C . . . R . . . L . . . T . . . E
. E . R . D . S . O . E . E . F . E . A . O . C .
. . ? . . . ? . . . ? . . . ? . . . ? . . . ? . .

마지막 행에는 "AIVDEN"이 남아요.

W . . . E . . . C . . . R . . . L . . . T . . . E
. E . R . D . S . O . E . E . F . E . A . O . C .
. . A . . . I . . . V . . . D . . . E . . . N . .

이제 지그재그 모양을 따라 읽으면 원래 메시지를 읽을 수 있어요.


출처

Wikipedia링크가 새 창이나 탭에서 열려요
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

레일 펜스 암호 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.