도구스학업·수학

님 게임·그런디 수 계산기

돌무더기 크기를 넣으면 님 합(XOR)으로 승패를 판정하고 이기는 수를 모두 찾아 줍니다. 이진수로 세워 자리마다 1의 개수를 보이므로 왜 하필 XOR인지가 눈으로 보이고, 미제르 규칙과 가져갈 수 있는 개수 제한도 다룹니다.

공백이나 쉼표로 나눠 적습니다. 8개까지.

0이면 제한 없음(보통 님)입니다. 제한이 있으면 무더기 크기 대신 그런디 수를 XOR합니다.

님 합이 2라

지금 차례가 이깁니다

님 합이 0이 아니므로 상대에게 「님 합 0」을 넘길 수 있습니다. 그런 수가 1가지 있습니다.

님 합 (XOR)2
그런디 수3 ⊕ 4 ⊕ 5 = 2
남은 무더기3개
이기는 수1가지

이진수로 세워 보면

무더기421
3011
4100
5101
1의 개수212
XOR010

XOR이 0이라는 것은 자리마다 1의 개수가 짝수라는 뜻입니다. 그 상태에서 어느 무더기를 어떻게 줄이든 적어도 한 자리의 개수가 홀수로 바뀌므로 XOR이 0이 아니게 됩니다. 거꾸로 XOR이 0이 아니면 가장 높은 1이 선 자리에 1을 가진 무더기가 반드시 있고, 그것을 줄여 다시 짝을 맞출 수 있습니다. 이것이 XOR로 승패가 갈리는 이유의 전부입니다.

이기는 수

1번 무더기에서 2를 가져가 31으로 줄입니다.

찾는 방법은 간단합니다. 무더기 a마다 a ⊕ (님 합 2)을 셈해, 그 값이 a보다 작으면 그 크기로 줄이면 됩니다. 줄인 뒤의 XOR이 0이 되기 때문입니다.

미제르 님(마지막을 집으면 지는 규칙)은 어디서나 뒤집히는 것이 아닙니다. 2개 이상인 무더기가 하나라도 남아 있으면 판정이 보통 님과 똑같고, 모든 무더기가 0이나 1뿐일 때만 뒤집혀서 「남은 무더기 수가 짝수여야 이긴다」가 됩니다. 큰 무더기가 있는 동안에는 「1만 남는 판을 몇 개로 만들지」를 이기는 쪽이 마음대로 고를 수 있어, 마지막 순간에만 규칙 차이가 드러나기 때문입니다. 이 예외를 빠뜨리고 XOR만 보면 마지막 몇 수에서 정반대 답을 줍니다 — 위에서 규칙을 바꿔 가며 1·1·1을 넣어 보세요.
한 번에 최대 k개까지만 가져갈 수 있으면 무더기 크기를 그대로 쓰지 않고 그런디 수 g(n) = n mod (k+1)로 바꿔 XOR합니다. 한 무더기만 놓고 보면 (k+1)의 배수가 지는 자리이고, 그 주기가 그대로 그런디 수가 됩니다. 스프라그–그런디 정리가 「독립된 게임 여럿의 합은 각자의 그런디 수를 XOR한 것과 같다」고 말해 주므로 보통 님과 똑같이 다룰 수 있습니다. 보통 님은 k가 무한한 경우이고 그때 g(n) = n입니다.
여기 나오는 판정은 양쪽이 최선을 다한다는 전제입니다. 「진다」고 나와도 상대가 한 번이라도 님 합을 0이 아닌 채로 넘기면 바로 뒤집힙니다. 지는 자리에서는 판을 복잡하게 만들어(크고 어중간한 무더기를 남겨) 상대가 실수하기를 노리는 것이 현실적인 수입니다. 무더기가 적고 작을수록 실수가 나올 여지도 줄어듭니다.

계산 방법

  1. 1무더기 크기를 공백이나 쉼표로 나눠 적습니다.
  2. 2마지막 돌을 집으면 이기는 규칙인지 지는 규칙인지 고릅니다.
  3. 3한 번에 가져갈 수 있는 개수에 제한이 있으면 그 값을 넣습니다.
  4. 4이진수 표에서 자리마다 1의 개수가 짝수인지 봅니다.
  5. 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일 · 결과는 참고용 추정치입니다.