고등학생에게 영어를 외국어로 가르치고 있어요.
커리큘럼 전체를 TV 프로그램에 맞춰 구성하기로 했어요. 어떤 단어가 쓰이고, 얼마나 자주 반복되는지 분석해야 하죠.
그러면 가장 단순한 프로그램부터 시작하고, 시간이 지나면서 난이도를 조금씩 높여 갈 수 있어요.
드라마 자막에서 각 단어가 몇 번 나오는지 세는 것이 과제예요.
이 드라마들의 자막은 ASCII 문자만 사용해요.
등장인물들은 _they're_나 it's 같은 축약형을 쓰면서 편한 영어로 자주 말해요. 이런 축약형은 두 단어(예: we are)에서 나왔지만, 축약형(we're)은 한 단어로 취급해요.
단어는 어떤 형태의 구두점(예: ":", "!", "?")이나 공백 문자(예: "\t", "\n", " ")로 구분할 수 있어요. 단어를 구분하지 않는 유일한 구두점은 축약형에 쓰이는 아포스트로피예요.
숫자도 단어로 봐요. 자막에 _It costs 100 dollars._라고 나오면 _100_은 그 자체로 하나의 단어가 돼요.
단어는 대소문자를 구분하지 않아요. 예를 들어, 다음 문장에서 _you_라는 단어는 세 번 나와요:
You come back, you hear me? DO YOU HEAR ME?
결과에서 단어 개수의 순서는 상관없어요.
지금까지 이야기한 요소를 여러 개 담은 예시를 볼까요:
"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled.
이 자막의 매핑 결과는 다음과 같아요:
123: 1
agent: 1
cried: 1
fled: 1
i: 1
password: 2
so: 1
special: 1
that's: 1
the: 2
이 연습 문제를 완료하려면 텍스트를 받아 각 단어가 몇 번 나타나는지 반환하는 wordCount 함수를 구현해야 해요.
이 연습 문제를 처음 푼다면, 제공된 시그니처를 그대로 사용하는 것을 추천해요:
wordCount :: String -> [(String, Int)]
나중에 이 문제를 다시 살펴보면서 다른 데이터 타입과 라이브러리를 다뤄 보는 것도 좋아요:
Text.Map.MultiSet
테스트 스위트는 말이 되는 거의 모든 타입 시그니처를 허용하도록 의도적으로 설계됐어요. 그러니 가장 좋다고 생각하는 시그니처를 찾아봐요.
Exercism에 가입하고 Haskell 트랙을 연습 문제 107개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.