조브리스트 해싱 계산기
판 위의 (칸, 말) 조합마다 난수를 두고 XOR로 판 전체의 해시를 만듭니다. 한 수를 두면 XOR 두 번으로 해시가 갱신되는 것과, 그 값이 처음부터 다시 계산한 값과 정확히 같은 것을 직접 확인할 수 있습니다.
점(.)은 빈 칸, 나머지 글자가 말입니다. 행은 줄바꿈이나 «/» 로 나눕니다.
씨앗이 같으면 언제나 같은 난수 표가 나옵니다. 같은 해시를 다시 만들 수 있습니다.
판 전체의 해시
0xa1782a6c65b4667b
놓여 있는 말 6개의 난수를 모두 XOR 한 값입니다. 말의 종류는 5가지, 칸은 9개입니다.
판
칸 번호는 「행,열」이고 왼쪽 위가 0,0입니다.
「행,열 -> 행,열」. 규칙은 보지 않으니 아무 칸에서 아무 칸으로 옮겨 보세요.
한 수 뒤의 판
난수 표 (앞부분)
| 칸 | R | b | n | p | r |
|---|---|---|---|---|---|
| 0,0 | 0x221182… | 0x346edc… | 0x1e9a57… | 0x2d160e… | 0x81c2e6… |
| 0,1 | 0x5647e5… | 0x1f6622… | 0x6e7411… | 0x7ad340… | 0xde15ea… |
| 0,2 | 0x2f43a9… | 0x61571b… | 0xc3e04a… | 0xe0b2f2… | 0xf871ca… |
| 1,0 | 0x644155… | 0xc8c99c… | 0x825851… | 0xcfadec… | 0x6049a8… |
| 1,1 | 0x24d32d… | 0x4b29d6… | 0x2cf21c… | 0x3e147a… | 0x2d41a8… |
| 1,2 | 0x56acac… | 0x01cb44… | 0x1c4020… | 0x34b63a… | 0x2d1d49… |
| 2,0 | 0xd03f72… | 0xdf6f91… | 0xd14b5a… | 0x32c962… | 0xb7e005… |
| 2,1 | 0x28da85… | 0x4299ff… | 0x575ab7… | 0x69745f… | 0xc1e57d… |
| 2,2 | 0xd48210… | 0x87bd64… | 0xde7932… | 0x714e9f… | 0x1b9edd… |
(칸, 말) 조합마다 64비트 난수가 하나씩 있습니다. 자리를 아끼려고 앞 8자리만 보였고, 칸이 많으면 앞 12줄만 보입니다. 씨앗이 같으면 언제나 이 표가 그대로 나옵니다.
사용 방법
- 1판을 적습니다. 점(.)은 빈 칸이고 나머지 글자가 말입니다.
- 2씨앗을 정하면 (칸, 말)마다 난수가 하나씩 정해집니다.
- 3판 전체의 해시를 확인합니다.
- 4수를 「행,열 -> 행,열」로 적어 XOR 두 번으로 갱신되는 과정을 봅니다.
- 5갱신한 값과 처음부터 다시 계산한 값이 같은지 확인합니다.
자주 묻는 질문
판 위의 (칸, 말) 조합마다 난수를 하나씩 미리 뽑아 두고, 놓여 있는 것들의 난수를 모두 XOR한 값을 그 판의 해시로 쓰는 방법입니다. 1970년 앨버트 조브리스트가 바둑 프로그램을 위해 내놓았고, 지금 체스·바둑 엔진의 전치표가 모두 이것 위에 서 있습니다.
한 수에 XOR 두 번으로 해시가 갱신되기 때문입니다. 말을 a에서 b로 옮기면 새 해시 = 옛 해시 XOR key(a, 말) XOR key(b, 말)입니다. 판을 처음부터 다시 훑을 필요가 없어 탐색 트리에서 초당 수백만 번씩 판이 바뀌어도 감당이 됩니다.
똑같이 XOR 두 번입니다. XOR은 자기 자신이 역연산이라 같은 값을 두 번 넣으면 없던 일이 됩니다. 두었다 물렀다를 되풀이하는 게임 트리 탐색에 이보다 잘 맞는 성질이 없습니다.
이미 계산해 본 판을 해시로 찾아 쓰는 표입니다. XOR은 순서에 상관없으므로 「수순은 달랐지만 같은 판」이 같은 해시를 갖고, 그래서 같은 판을 두 번 계산하지 않게 됩니다. 「전치(transposition)」란 서로 다른 수순이 같은 판에 이르는 것을 말합니다.
서로 다른 두 판을 같은 것으로 착각합니다. 64비트라면 판 백만 개를 담아도 확률이 2.7×10⁻⁸이지만, 십억 개면 2.7%까지 오릅니다. 엔진이 32비트가 아니라 64비트를 쓰는 이유이고, 그래도 아주 드물게 잘못된 판을 재사용하는 일이 생기는 이유이기도 합니다.
씨앗 하나에서 결정적으로 뽑습니다. 이 도구는 splitmix64를 씁니다. 씨앗이 같으면 언제나 같은 표가 나오므로, 같은 해시를 재현할 수 있고 프로그램을 껐다 켜도 같은 전치표를 쓸 수 있습니다.
전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고, 입력한 판과 씨앗은 이 기기에만 남습니다.
알아두면 좋은 점
- 정답지는 재계산입니다. XOR 두 번으로 갱신한 해시가 옮긴 뒤의 판을 처음부터 다시 훑어 계산한 값과 같아야 합니다. 네 가지 판에서 가능한 모든 (출발 칸, 도착 칸) 짝을 돌려 한 건도 어긋나지 않는 것을 확인했습니다.
- 무르는 것도 검사합니다. 같은 수를 되돌리면 원래 해시로 «정확히» 돌아와야 합니다.
- 잡는 수는 잡힌 말의 키를 한 번 더 빼야 합니다. 이 자리를 놓치면 해시가 어긋나므로 따로 검사에 넣었습니다.
- XOR이 순서에 상관없다는 것도 검사합니다. 말을 놓는 순서를 뒤집어도, 두 수의 순서를 바꿔도 같은 판이면 같은 해시가 나옵니다 — 전치표가 성립하는 근거입니다.
- 난수 표는 씨앗이 같으면 언제나 같고, 64비트를 벗어나지 않으며, 384개를 뽑아도 겹치지 않는 것을 확인했습니다.
- 충돌 확률은 생일 문제로 계산합니다. 아주 작은 확률에서 1 − exp(x)를 그대로 계산하면 자릿수를 잃고 0으로 뭉개지므로, 지수가 아주 작을 때는 −x로 대신 계산합니다.
- 칸은 400개까지, 말의 종류는 20가지까지 다룹니다.
- 이 도구는 해시가 어떻게 움직이는지 보이는 것이 목적이라 규칙(어느 말이 어디로 갈 수 있는지)은 보지 않습니다. 아무 칸에서 아무 칸으로 옮길 수 있습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.