트랙
/
Haskell
Haskell
/
연습 문제
/
회전 암호
회전 암호

회전 암호

보통

지침

때때로 카이사르 암호라고도 불리는 회전 암호를 구현해 보세요.

카이사르 암호는 0과 26 사이의 정수 키를 사용해 알파벳의 모든 글자 위치를 옮기는 단순한 시프트 암호예요. 모듈러 연산 때문에 0이나 26을 키로 쓰면 항상 같은 결과가 나와요. 글자는 키의 값만큼 이동해요.

회전 암호는 일반적으로 ROT + <key> 형태로 표기해요. 가장 널리 쓰이는 회전 암호는 ROT13이에요.

라틴 알파벳에 ROT13을 적용하면 다음과 같아요:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm

가능한 키가 27개이고 실제로 쓸 수 있는 키가 25개이기 때문에 아트바시 암호보다 더 강력해요.

암호문은 공백과 구두점을 포함해 입력과 같은 형식으로 작성해요.

예시

  • ROT5 omg는 trl이 돼요
  • ROT0 c는 c가 돼요
  • ROT26 Cool은 Cool이 돼요
  • ROT13 The quick brown fox jumps over the lazy dog.는 Gur dhvpx oebja sbk whzcf bire gur ynml qbt.가 돼요
  • ROT13 Gur dhvpx oebja sbk whzcf bire gur ynml qbt.는 The quick brown fox jumps over the lazy dog.가 돼요

힌트

Int와 String을 받아 회전 암호로 인코딩하는 rotate 함수를 구현해야 해요. 타입이 확실하지 않다면 제공된 시그니처를 사용해도 되지만, 그것이 창의력을 제한하도록 두지는 마세요.

이 연습 문제는 텍스트 데이터를 다뤄요. 역사적인 이유로 Haskell의 String 타입은 [Char], 즉 문자의 리스트와 같은 의미예요. 텍스트 데이터를 더 효율적으로 다루려면 Text 타입을 사용할 수 있어요.

이 연습 문제의 선택적인 확장으로, 다음과 같은 것도 해볼 수 있어요.

import qualified Data.Text as T
import           Data.Text (Text)
  • Text 타입을 예를 들어 rotate :: Int -> Text -> Text처럼 사용하고, Data.Text의 컴비네이터는 예를 들어 T.pack처럼 참조해요.
  • Data.Text 문서를 찾아봐요.
  • RotationalCipher.hs에서 모든 String을 Text로 바꿔요. 즉:
rotate :: Int -> Text -> Text

이 부분은 전부 선택 사항이에요.


출처

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

회전 암호 문제를 시작해 볼 준비가 됐나요?

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