ETL

ETL

쉬움

소개

Lexiconia라는 온라인 멀티플레이어 게임을 만드는 회사에서 일하고 있어요.

게임을 하려면 각 플레이어는 13개의 글자를 받고, 그 글자들을 재배열해서 단어를 만들어야 해요. 글자마다 점수가 다른데, 어떤 글자는 다른 글자보다 단어를 만들기가 더 쉽거든요.

게임은 처음에 영어로 출시했는데 인기가 아주 많아요. 그래서 이제 회사는 다른 언어로도 확장하려고 해요.

언어마다 글자의 점수를 다르게 지원해야 해요. 점수는 그 언어에서 각 글자가 다른 글자에 비해 얼마나 자주 쓰이는지로 정해져요.

예를 들어 'C'는 영어에서 꽤 흔한 글자라서 3점밖에 안 돼요. 그런데 노르웨이어에서는 아주 드문 글자라서 10점이에요.

새로운 언어를 더 쉽게 추가하려면, 팀에서 게임에 글자와 점수를 저장하는 방식을 바꿔야 해요.

지침

게임에서 글자와 각 글자의 점수를 담은 데이터 형식을 바꾸는 것이 과제예요.

지금은 글자들이 점수를 기준으로 그룹으로 묶여 저장되어 있어요. 일대다 매핑이죠.

  • 1점: "A", "E", "I", "O", "U", "L", "N", "R", "S", "T",
  • 2점: "D", "G",
  • 3점: "B", "C", "M", "P",
  • 4점: "F", "H", "V", "W", "Y",
  • 5점: "K",
  • 8점: "J", "X",
  • 10점: "Q", "Z",

이제는 각 글자마다 그 점수를 짝지어 저장하는 일대일 매핑으로 바꿔야 해요.

  • "a"는 1점이에요.
  • "b"는 3점이에요.
  • "c"는 3점이에요.
  • "d"는 2점이에요.
  • 등등.

이 변경의 일환으로, 팀은 글자를 대문자가 아니라 소문자로 바꾸기로도 했어요.

Note

데이터가 이전에 어떻게 구성되어 있었고 어떻게 바뀌어야 하는지 살펴보고 싶다면, 테스트 스위트의 예시를 한번 봐요.

힌트

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

이 연습 문제를 선택적으로 확장하고 싶다면, 다음과 같이 해볼 수 있어요.

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

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

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

      import qualified Data.Text as T
      import           Data.Text (Text)
    
  • 이제 예를 들어 transform :: Map Int Text -> Map Char Int라고 쓰고, Data.Text의 콤비네이터를 T.toLower처럼 사용할 수 있어요.

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

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

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

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

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