프레디는 훨씬 큰 콜리플라워를 키우는 방법을 새로 알아냈다. 동료 정원사 토미에게 이 방법을 넘기고 싶지만 다른 사람이 훔쳐 가는 것은 막고 싶다. 그래서 두 사람은 M. E. Ohaver가 제안한 간단한 암호화 기법을 쓰기로 했다.
이 기법은 모스 부호를 바탕으로 한다. 모스 부호는 문자마다 길이가 다른 점과 선의 나열로 글자를 적는다. 알파벳 대문자 26개의 부호는 다음과 같다.
| 문자 | 부호 | 문자 | 부호 | 문자 | 부호 | 문자 | 부호 |
|---|---|---|---|---|---|---|---|
| A | .- | H | .... | O | --- | V | ...- |
| B | -... | I | .. | P | .--. | W | .-- |
| C | -.-. | J | .--- | Q | --.- | X | -..- |
| D | -.. | K | -.- | R | .-. | Y | -.-- |
| E | . | L | .-.. | S | ... | Z | --.. |
| F | ..-. | M | -- | T | - | ||
| G | --. | N | -. | U | ..- |
길이가 4인 조합은 모두 열여섯 가지인데, 실제 모스 부호는 그중 네 가지를 쓰지 않는다. 이 문제에서는 남은 네 가지에 아래 문자를 배정한다. 실제 모스 부호의 배정은 아니다.
| 문자 | 부호 |
|---|---|
_ 밑줄 | ..-- |
, 쉼표 | .-.- |
. 마침표 | ---. |
? 물음표 | ---- |
메시지에서 문자와 문자 사이는 짧은 쉼으로 구분하고 보통 공백으로 적는다. 그래서 ACM_GREATER_NY_REGION은 이렇게 나간다.
.- -.-. -- ..-- --. .-. . .- - . .-. ..-- -. -.-- ..-- .-. . --. .. --- -.
Ohaver의 방식은 문자 사이의 쉼을 지워 모스 부호를 망가뜨린다. 쉼에는 실제로 정보가 담겨 있다. 모스 부호는 길이가 일정하지 않고 접두 부호도 아니기 때문이다. 쉼을 지운 .--.-.-- 하나만 놓고 보면 ACM, AKW, ANY를 비롯해 108가지 글로 읽힌다. 그래서 이 방식은 점과 선 옆에 각 문자의 부호 길이를 한 자리씩 적은 숫자열을 함께 남긴다. .--.-.-- 242라고 적으면 읽는 방법이 다시 하나로 정해진다.
암호화와 복호화는 똑같은 세 단계를 밟는다.
암호문 AKADTOF_IBOETATUK_IJN에 이 단계를 밟아 보자. 1단계는 다음을 만든다.
.--.-.--..----..-...--..-...---.-.--..--.-..--...----. 232313442431121334242
2단계에서 숫자열을 뒤집는다.
242433121134244313232
같은 점과 선을 이 길이로 다시 자르면 ACM_GREATER_NY_REGION이 나온다.
이 방식은 그리 안전하지 않지만 프레디는 이만하면 됐다고 여긴다. 프레디를 대신해 이 알고리즘을 구현하라.
입력은 Ohaver의 알고리즘으로 암호화한 메시지 여러 개로 이루어지고, 한 줄에 하나씩 주어진다. 메시지에는 알파벳 대문자 26개와 밑줄, 쉼표, 마침표, 물음표만 나온다. 메시지 하나의 길이는 1000자를 넘지 않는다. 입력은 파일의 끝에서 끝난다.
입력의 메시지마다 복호화한 결과를 한 줄에 하나씩 출력한다.