Pig Latin

Pig Latin

보통

소개

부모님이 여러분과 형제자매에게 2대2 농구 한 판을 제안했어요. 이길 자신이 있었던 부모님은 처음 몇 점은 여러분이 넣도록 봐주셨지만, 이내 경기를 장악하기 시작하셨어요. 조금 기운을 내야 했던 여러분은 Pig Latin으로 말하기 시작해요. Pig Latin은 아이들이 만들어 낸 언어라서 아이가 아닌 사람은 알아듣기 어려워요. 이렇게 하면 부모님을 이길 우위를 얻을 수 있어요!

지침

이번 과제는 영어 텍스트를 Pig Latin으로 번역하는 거예요. 번역은 네 가지 규칙으로 정의되는데, 각 규칙은 단어 맨 앞에 오는 모음과 자음의 패턴을 살펴봐요. 규칙은 단어가 모음과 자음을 어떻게 쓰는지 봐요:

  • 모음: a, e, i, o, u 글자
  • 자음: 영어 알파벳의 나머지 21개 글자

규칙 1

단어가 모음으로 시작하거나 "xr" 또는 "yt"로 시작하면, 단어 끝에 "ay" 소리를 붙여요.

예를 들면:

  • "apple" -> "appleay" (모음으로 시작해요)
  • "xray" -> "xrayay" ("xr"로 시작해요)
  • "yttria" -> "yttriaay" ("yt"로 시작해요)

규칙 2

단어가 하나 이상의 자음으로 시작하면, 먼저 그 자음들을 단어 끝으로 옮기고, 그다음 단어 끝에 "ay" 소리를 붙여요.

예를 들면:

  • "pig" -> "igp" -> "igpay" (자음 하나로 시작해요)
  • "chair" -> "airch" -> "airchay" (자음 여러 개로 시작해요)
  • "thrush" -> "ushthr" -> "ushthray" (자음 여러 개로 시작해요)

규칙 3

단어가 자음 0개 이상 뒤에 "qu"가 오는 형태로 시작하면, 먼저 그 자음들(있는 경우)과 "qu" 부분을 단어 끝으로 옮기고, 그다음 단어 끝에 "ay" 소리를 붙여요.

예를 들면:

  • "quick" -> "ickqu" -> "ickquay" ("qu"로 시작하고 앞에 자음이 없어요)
  • "square" -> "aresqu" -> "aresquay" (자음 하나 뒤에 "qu"로 시작해요)

규칙 4

단어가 하나 이상의 자음 뒤에 "y"가 오는 형태로 시작하면, 먼저 "y" 앞에 오는 자음들을 단어 끝으로 옮기고, 그다음 단어 끝에 "ay" 소리를 붙여요.

몇 가지 예를 들면:

  • "my" -> "ym" -> "ymay" (자음 하나 뒤에 "y"로 시작해요)
  • "rhythm" -> "ythmrh" -> "ythmrhay" (자음 여러 개 뒤에 "y"로 시작해요)

힌트

단위 테스트에 단어 예시가 나와요. 단위 테스트에 나오는 특정 자음 조합에 얽매이지 말고 자음을 묶어 봐요.

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

이 연습 문제를 선택 사항으로 확장해서 다음과 같이 해볼 수도 있어요.

  • Haskell의 문자열 타입에 대해 읽어 봐요.

  • package.yaml의 의존성 목록에 - text를 추가해요.

  • 다음 방식으로 Data.Text를 임포트해요:

    import qualified Data.Text as T
    import           Data.Text (Text)
    
  • 이제 예를 들어 translate :: Text -> Text처럼 작성하고, Data.Text의 콤비네이터를 T.isSuffixOf처럼 참조할 수 있어요.

  • Data.Text의 문서를 찾아봐요.

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

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

Pig Latin 문제를 시작해 볼 준비가 됐나요?

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

Pig Latin 깊이 살펴보기!

패턴 매칭과 정규 표현식, 그리고 멋진 Prolog 풀이도 살펴보고, 이렇게 물어봐요. 연습 문제를 제대로 푼 걸까요, 그저 테스트만 통과시킨 걸까요?