한국어 단어 게임 판정기 만들기: 쿵쿵따·초성 게임과 "인정?" 투표
랜선포차의 초성 게임·쿵쿵따·아이엠그라운드가 단어를 판정하는 방법. 형태소 사전에서 뽑은 6.6만·8.9만 단어, 두음법칙, 금칙어, 사전에 없는 말을 3초 투표로 넘긴 결정까지 정리했다.

초성 게임과 쿵쿵따는 사람끼리 할 때는 판정이 쉽다. 누가 이상한 말을 하면 다 같이 “그런 말이 어딨어!“라고 외치면 된다. 온라인에서는 그 외침을 누군가 대신해야 한다. 랜선포차에는 단어를 입력하는 게임이 세 개 있다. 초성 게임, 쿵쿵따, 아이엠그라운드다. 이 글은 세 게임이 같이 쓰는 판정기를 만든 기록이다.
사전을 어디서 가져올까
판정기의 절반은 사전이다. “이 두 글자가 명사인가”를 알아야 한다. 쓸 만한 공개 사전을 찾다가 한국어 형태소 분석기용 사전인 mecab-ko-dic(Apache License 2.0)을 골랐다. 일반명사와 외래어 명사 표에서 한글 두 글자 표제어는 초성 게임용으로, 세 글자 표제어는 쿵쿵따용으로 뽑았다. 쿵쿵따에는 끝말잇기 관례대로 지명·인명 같은 고유명사를 넣지 않았다.
이 사전에는 표제어마다 “단어 비용” 열이 있다. 말뭉치에서 자주 나온 말일수록 비용이 낮다. 이걸 빈도 순위로 썼다. 사전은 두 층으로 나눴다. “흔한 말”은 문제를 낼 때 기준이 되는 목록이고, “그 밖의 말”은 정답으로 인정만 하는 목록이다. 흔한 말은 직접 쓴 목록을 따로 두어 섞었다. 사전 파일은 서버에만 두고 폰으로 보내는 코드에는 넣지 않았다. 수만 단어를 받느라 로딩이 길어질 필요도 없고, 정답 목록이 폰에 있으면 들여다볼 수도 있기 때문이다.
| 초성 게임 | 쿵쿵따 | |
|---|---|---|
| 단어 길이 | 두 글자 | 세 글자 |
| 흔한 말 | 2,815개 | 2,632개 |
| 그 밖에 인정하는 말 | 63,129개 | 86,636개 |
| 합계 | 약 6.6만 | 약 8.9만 |
| 금칙어 | 114개 | 136개 |
커밋 메시지에도 이 숫자가 남아 있다. 9월 26일 커밋 891317f에서 초성 게임이 mecab-ko-dic 두 글자 명사 6.6만 개와 함께 들어왔고, 다음 날 f7bf9c2는 “쿵쿵따(두음법칙, 3글자 사전 8.9만)·아이엠그라운드(주제 23개)“였다.
금칙어와 출제하지 않는 초성
형태소 사전에는 비속어, 성적인 말, 혐오 표현도 들어 있다. 이런 말은 사전에서 빼고 금칙어 목록으로 옮겼다. 금칙어를 입력하면 “모르는 말”이 아니라 그 자리에서 진다. 투표로 살려 낼 수도 없다. 일부러 욕을 쳐 보는 사람에게 투표 기회까지 줄 이유는 없었다.
초성 게임에서는 문제 자체도 거른다. “ㅅㅂ”, “ㅂㅅ”, “ㅈㄹ” 같은 초성은 그 자체가 욕설 약어라 출제하지 않는다. 또 흔한 말 사전에 그 초성으로 시작하는 단어가 15개 이상 있어야만 문제로 낸다. 정답이 거의 없는 초성이 나오면 첫 사람부터 막혀서 게임이 되지 않는다.
쿵쿵따의 두음법칙
쿵쿵따는 앞사람 단어의 끝 글자로 시작하는 세 글자 단어를 잇는 게임이다. 여기에는 두음법칙이 끼어든다. 앞 단어가 “역사력”처럼 “력”으로 끝나면 “역”으로 시작해도 되고, “라”로 끝나면 “나”로 시작해도 된다. 판정기는 끝 글자 하나에 대해 받아 줄 첫 글자 후보를 여러 개 만든다. 초성 ㄹ은 ㄴ과 ㅇ으로, “녀·뇨·뉴·니”는 “여·요·유·이”로도 바꿔 본다.
뒤에 이을 말이 없는 “한방 단어”도 있다. “~름”, “~릇”으로 끝나는 말처럼 다음 사람이 받을 단어가 거의 없는 말이다. 이걸 막을지 고민하다가 공격 수단으로 허용하기로 결정했다. 결정 기록에는 “쿵쿵따 한방 단어: 공격 수단으로 허용”이라고 한 줄로 남아 있다. 다음 사람은 이을 말이 없어 버티다가 시간 초과로 지기 쉽다. 제한 시간은 첫 차례 10초에서 단어가 하나 나올 때마다 0.5초씩 줄어 4.5초까지 내려간다. 20단어가 이어지면 그 순간 차례였던 사람이 진다. 끝나지 않는 판을 막으려는 상한이다.
쿵쿵따. 앞 단어와 이어 갈 글자, 남은 시간, 몇 번째 단어인지가 조작판에 뜬다
사전에 없으면 사람에게 묻는다
아무리 큰 사전도 모든 말을 갖고 있지는 않다. 신조어, 줄임말, 방금 만든 합성어가 나온다. 처음 버전은 사전에 없으면 무조건 틀림으로 처리했는데, 해 보니 억울한 경우가 너무 많았다. 반대로 전부 받아 주면 아무 글자나 쳐도 이긴다.
그래서 판정을 사람에게 넘기기로 했다. 사전에 없는 말이 나오면 차례 타이머를 멈추고, 낸 사람을 뺀 나머지가 3초 동안 “인정?” 투표를 한다. 결정 과정에서 두 가지를 정해야 했다.
| 쟁점 | 결정 | 이유 |
|---|---|---|
| 인정과 불인정이 같으면 | 인정 | 애매하면 낸 사람 편 |
| 아무도 안 누르면 | 불인정 | 억지 단어는 누군가 편을 들어 줘야 산다 |
처음 설계에서는 아무도 안 누르면 통과였다. 그러면 다들 머뭇거리는 사이 억지 단어가 너무 쉽게 살아남는다. 커밋 bdc774a의 메시지가 이 결정이다. “단어 게임 인정 투표: 아무도 안 누르면 불인정(결정), 동률은 인정”. 투표로 인정된 말은 그 판의 사전에 들어가서, 같은 판에서 다시 나오면 “이미 나온 말”로 처리된다.
투표는 3초다. 단어를 낸 사람은 빼고, 나머지 참가자의 조작판에 “인정”과 “불인정” 버튼이 뜬다. 한 사람은 한 번만 누를 수 있고, 누른 표는 바꿀 수 없다. 모두가 누르면 3초를 다 기다리지 않고 바로 마감한다. 마감되면 인정 수와 불인정 수를 비교해 결과를 내고, 화면에는 “인정”이나 “반려” 도장이 찍힌다. 투표하는 동안 단어를 낸 사람의 차례 타이머는 멈춰 있어서, 투표 시간 때문에 시간 초과로 지는 일은 없다.
이 글의 커버 이미지를 찍을 때 초성 ㅁㅇ에 일부러 “웨위”를 넣었다. 사전에 없는 말이니 투표가 열렸고, 다른 참가자들이 불인정을 눌러 “반려” 도장이 찍혔다. 억지 단어가 사람들 판단으로 걸러지는 모습을 그대로 담으려고 했다.
아이엠그라운드는 주제 사전
아이엠그라운드는 “과일”, “동물”, “한국 도시”처럼 주제가 나오면 그 주제의 단어를 대는 게임이다. 형태소 사전으로는 “이 말이 과일인가”를 알 수 없어서, 주제 23개마다 단어 목록을 따로 만들었다. 목록에 있으면 통과, 어느 목록에도 없으면 역시 인정 투표로 간다. 다른 주제 목록에 있는 말(과일 차례에 “호랑이”)도 투표로 넘어가는데, 이런 말은 대개 누가 봐도 틀린 답이라 금방 반려된다. 게임 시작 때 예시로 보여 준 단어는 쓸 수 없게 했다. 예시를 그대로 따라 치는 게 제일 쉬운 길이라서다.
돌아보면 판정기의 핵심은 사전의 크기가 아니라 “모를 때 어떻게 하느냐”였다. 사전이 모르는 말을 사람의 투표로 넘기자, 억울한 판정이 줄었고 투표 자체가 작은 이벤트가 됐다. 게임별 요령은 쿵쿵따 공략과 초성 게임 공략에 따로 정리되어 있다. 세 단어 게임은 랜선포차의 미니게임 24종 가운데 섞여 나온다.


