님 게임·그런디 수 계산기
돌무더기 크기를 넣으면 님 합(XOR)으로 승패를 판정하고 이기는 수를 모두 찾아 줍니다. 이진수로 세워 자리마다 1의 개수를 보이므로 왜 하필 XOR인지가 눈으로 보이고, 미제르 규칙과 가져갈 수 있는 개수 제한도 다룹니다.
공백이나 쉼표로 나눠 적습니다. 8개까지.
0이면 제한 없음(보통 님)입니다. 제한이 있으면 무더기 크기 대신 그런디 수를 XOR합니다.
님 합이 2라
지금 차례가 이깁니다
님 합이 0이 아니므로 상대에게 「님 합 0」을 넘길 수 있습니다. 그런 수가 1가지 있습니다.
이진수로 세워 보면
| 무더기 | 4 | 2 | 1 |
|---|---|---|---|
| 3 | 0 | 1 | 1 |
| 4 | 1 | 0 | 0 |
| 5 | 1 | 0 | 1 |
| 1의 개수 | 2 | 1 | 2 |
| XOR | 0 | 1 | 0 |
XOR이 0이라는 것은 자리마다 1의 개수가 짝수라는 뜻입니다. 그 상태에서 어느 무더기를 어떻게 줄이든 적어도 한 자리의 개수가 홀수로 바뀌므로 XOR이 0이 아니게 됩니다. 거꾸로 XOR이 0이 아니면 가장 높은 1이 선 자리에 1을 가진 무더기가 반드시 있고, 그것을 줄여 다시 짝을 맞출 수 있습니다. 이것이 XOR로 승패가 갈리는 이유의 전부입니다.
이기는 수
1번 무더기에서 2개를 가져가 3 → 1으로 줄입니다.
찾는 방법은 간단합니다. 무더기 a마다 a ⊕ (님 합 2)을 셈해, 그 값이 a보다 작으면 그 크기로 줄이면 됩니다. 줄인 뒤의 XOR이 0이 되기 때문입니다.
계산 방법
- 1무더기 크기를 공백이나 쉼표로 나눠 적습니다.
- 2마지막 돌을 집으면 이기는 규칙인지 지는 규칙인지 고릅니다.
- 3한 번에 가져갈 수 있는 개수에 제한이 있으면 그 값을 넣습니다.
- 4이진수 표에서 자리마다 1의 개수가 짝수인지 봅니다.
- 5이기는 수 목록에서 어느 무더기를 얼마나 줄이면 되는지 확인합니다.
자주 묻는 질문
무더기 크기를 모두 XOR한 값(님 합)이 0이면 지금 차례인 쪽이 지고, 0이 아니면 이깁니다. 양쪽이 최선을 다한다는 전제입니다. 1·3·5·7처럼 님 합이 0인 배치는 후공이 이기고, 3·4·5처럼 0이 아니면 선공이 이깁니다.
XOR이 0이라는 것은 이진수로 세워 놓았을 때 자리마다 1의 개수가 짝수라는 뜻이기 때문입니다. 그 상태에서 어느 무더기를 어떻게 줄이든 적어도 한 자리의 개수가 홀수로 바뀌므로 XOR이 0이 아니게 됩니다. 거꾸로 XOR이 0이 아니면 가장 높은 1이 선 자리에 1을 가진 무더기가 반드시 있고, 그것을 줄여 다시 짝을 맞출 수 있습니다.
무더기 a마다 a ⊕ (님 합)을 셈해, 그 값이 a보다 작으면 그 크기로 줄이면 됩니다. 줄인 뒤의 XOR이 0이 되기 때문입니다. 3·4·5라면 님 합이 2이므로 3 ⊕ 2 = 1이 3보다 작아, 첫 무더기를 3에서 1로 줄이는 것이 유일한 답입니다.
2개 이상인 무더기가 하나라도 남아 있으면 판정이 보통 님과 똑같고, 모든 무더기가 0이나 1뿐일 때만 뒤집혀 「남은 무더기 수가 짝수여야 이긴다」가 됩니다. 큰 무더기가 있는 동안에는 1만 남는 판을 몇 개로 만들지를 이기는 쪽이 마음대로 고를 수 있어, 마지막 순간에만 규칙 차이가 드러나기 때문입니다. 이 예외를 빠뜨리고 XOR만 보면 마지막 몇 수에서 정반대 답을 줍니다.
무더기 크기를 그대로 쓰지 않고 그런디 수 g(n) = n mod (k+1)로 바꿔 XOR합니다. 한 무더기만 놓고 보면 (k+1)의 배수가 지는 자리이고, 그 주기가 그대로 그런디 수가 됩니다. 스프라그–그런디 정리가 「독립된 게임 여럿의 합은 각자의 그런디 수를 XOR한 것과 같다」고 말해 주므로 보통 님과 똑같이 다룰 수 있습니다.
상대의 실수를 노리는 수밖에 없습니다. 판정은 양쪽이 최선을 다한다는 전제이므로, 상대가 한 번이라도 님 합을 0이 아닌 채로 넘기면 바로 뒤집힙니다. 크고 어중간한 무더기를 남겨 판을 복잡하게 만드는 것이 현실적인 대응이고, 무더기가 적고 작을수록 실수가 나올 여지도 줄어듭니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- XOR 판정이 맞는지를 게임 트리를 통째로 훑는 전수 탐색과 대조해 검증했습니다. 무더기 셋(각 0~6)의 343가지, 무더기 넷(각 0~4)의 625가지를 모두 확인했으며, XOR 정리를 전혀 쓰지 않는 방법이라 서로를 검산해 줍니다.
- 미제르 규칙도 같은 전수 탐색과 대조했습니다. 모든 무더기가 1 이하일 때만 판정이 뒤집히고 그 밖에는 보통 님과 같다는 것을 확인했습니다.
- 이기는 수로 찾은 모든 수가 실제로 님 합을 0으로 만드는 것, 님 합이 0이 아니면 그런 수가 반드시 있고 0이면 하나도 없는 것을 무더기 셋의 전 조합으로 고정했습니다.
- 개수 제한이 있는 님도 전수 탐색과 대조했습니다. 그런디 수가 n mod (k+1)인 것, 한 무더기만 있을 때 (k+1)의 배수가 지는 자리인 것, 찾은 수가 제한 안의 수인 것을 모두 확인했습니다.
- 이진수 표에서 자리마다 1의 개수가 모두 짝수인 것과 님 합이 0인 것이 정확히 같은 조건임을 테스트로 고정했습니다. 이 도구가 보이려는 것이 바로 그 대응입니다.
- 무더기는 8개까지, 한 무더기는 999개까지 다룹니다. 이진수 표를 함께 보이는 것이 목적이라 그보다 크면 화면이 읽히지 않습니다.
- 판정은 양쪽이 최선을 다한다는 전제입니다. 실제 대국에서는 상대의 실수 한 번으로 뒤집히므로 「진다」가 곧 포기를 뜻하지는 않습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.