트랙
/
AWK
AWK
/
연습 문제
/
암호 사각형
암호 사각형

암호 사각형

보통

지침

비밀 메시지를 작성하는 고전적인 방법인 정사각형 암호를 구현해 보세요.

영어 텍스트가 주어지면, 그 텍스트의 인코딩된 버전을 출력해요.

먼저 입력은 정규화돼요: 영어 텍스트에서 공백과 구두점을 제거하고 메시지를 소문자로 바꿔요.

그런 다음, 정규화된 문자들을 행으로 나눠요. 이 행들은 사이에 줄바꿈을 넣어 출력하면 직사각형을 이룬다고 볼 수 있어요.

예를 들어, 다음 문장은

"If man was meant to stay on the ground, god would have given us roots."

다음과 같이 정규화돼요:

"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"

평문은 가능한 한 정사각형에 가까운 직사각형으로 구성해야 해요. 직사각형의 크기는 메시지의 길이에 따라 정해져요.

c가 열의 수이고 r이 행의 수라면, r x c 직사각형에 대해 다음을 만족하는 가장 작은 정수 c를 찾아요:

  • r * c >= length of message,
  • 그리고 c >= r,
  • 그리고 c - r <= 1.

정규화된 텍스트는 54자이고, 이에 따라 c = 8, r = 7인 직사각형이 정해져요:

"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots  "

암호화된 메시지는 열을 왼쪽에서 오른쪽으로 읽어 내려가면서 얻어요.

위 메시지는 다음과 같이 암호화돼요:

"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"

인코딩된 텍스트를 (r X c) 크기의 완벽한 직사각형을 채우는 묶음으로 출력해요. 이때 r 길이의 묶음이 c개이고, 공백으로 구분해요. 완벽한 직사각형에 n 글자 부족한 문구라면, 마지막 n개 묶음 각각 뒤에 공백 하나를 덧붙여요.

"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn  sseoau "

이 묶음들을 쌓으면 암호문을 시각적으로 원래 메시지로 되돌릴 수 있다는 점을 눈여겨봐요:

"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
AWK Exercism

암호 사각형 문제를 시작해 볼 준비가 됐나요?

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