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

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

jq 팁

이 연습 문제는 입력 객체를 받아 새로운 객체로 변환하는 문제예요. 도움이 될 만한 내장 함수 두어 개를 소개할게요:

  • to_entries
    • 입력으로 객체를 받아요
    • 결과로 _배열_을 출력해요. 배열의 각 원소는 {"key": "K", "value": V} 객체예요
      • 각 K는 입력 객체의 키예요
      • 각 V는 K에 대응하는 값이에요
  • from_entries
    • 위와 반대되는 연산이에요
    • {"key": K, "value": V} 객체로 이루어진 배열을 받아 객체를 만들어요

예를 들어 볼게요:

jq -n '
    {
        "username": "glennj",
        "tracks": ["bash", "awk", "jq"],
        "reputation": 123
    }
    | to_entries
'

이렇게 출력해요:

[
  {
    "key": "username",
    "value": "glennj"
  },
  {
    "key": "tracks",
    "value": ["bash", "awk", "jq"]
  },
  {
    "key": "reputation",
    "value": 123
  }
]
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
jq Exercism

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

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