〈60cm 통로 판정이 63cm 틈에서 실패하는 이유〉를 쓰고 나서 한동안 그 문제를 그대로 뒀다. 이번에 통로 계산을 처음부터 다시 짰는데, 그 전에 예전 계산이 정확히 언제 틀리는지부터 다시 확인했다. 이 글은 그 기록이다.
틈 하나로만 지나갈 수 있는 방
정답을 확실히 아는 방이 필요했다. 300×400cm 방 가운데를 옷장 두 개로 벽에서 벽까지 막고 틈을 하나만 남겼다. 방 안쪽으로 가려면 이 틈을 지나야 하니, 지름 60cm인 사람이 지나가는지는 틈이 60cm 이상인지만 보면 된다.
틈을 59, 60, 61, 63, 68cm로 바꿔 가며 넣었다. 새 계산은 59cm만 막혔다고 했고 나머지는 지나간다고 했다. 60cm는 양쪽 옷장에 몸이 딱 스치는 경우라 여유가 0인데, 이 사이트는 닿기만 한 건 겹침이 아니라는 기준을 쓰고 있어서 지나가는 쪽으로 판정했다.
예전 계산이 틀린 이유를 다시 보니
예전 글에는 10cm 간격 점 때문에 판정이 최대 10cm쯤 엄격하다고 적었다. 맞는 말이지만 그게 다가 아니었다. 같은 63cm 틈을 오른쪽으로 1cm씩 옮기며 10번 넣어 보니 예전 계산은 그중 4번만 통과시켰다. 60cm 틈은 1번, 68cm 틈은 9번이었다. 틈 안에 10의 배수 좌표가 하나라도 들어가면 통과, 아니면 실패였던 것이다. 가구를 1cm 옮겼다고 답이 바뀌는 계산은 믿고 쓰기 어렵다. 새 계산은 10번 모두 같은 답을 냈다.
글에 나온 배치도 다시
노트에서 옷장을 185에 둔 배치는 예전 계산이 '미확인'이었는데 새 계산은 지나갈 수 있다고 한다. 그 자리를 다시 재 보니 가로로 63cm, 세로로 23cm 떨어진 두 모서리 사이였고, 모서리끼리의 실제 거리는 67.1cm였다. 예전 계산은 가구 둘레 여유 공간을 네모나게 잡아서 이 대각선을 가로 63cm로만 봤다. 새 계산은 여유 공간의 모서리를 둥글게 잡는다. 찾은 길에서 가장 좁은 곳은 66.1cm로 나오는데, 모서리 사이 거리보다 1cm쯤 작은 건 길을 일정 간격의 점을 따라 긋기 때문이다.
판정을 미룬 두 건
모서리끼리 마주 본 틈도 58cm부터 63.6cm까지 8가지로 넣어 봤다. 예전 계산은 8가지 모두 막혔다고 했다. 63.6cm 틈까지 그랬다. 새 계산은 59.5cm 이하를 막힘, 60.1cm 이상을 통과로 맞게 답했고, 59.8cm, 60cm에서는 답을 내지 않고 '검증 안 됨'을 띄웠다. 60cm와 0.2cm 안쪽으로 차이 나는 틈이라 점 간격을 1.25cm까지 줄여도 확정하지 못했다. 틀린 답을 내는 것보다는 모른다고 하는 편이 낫다고 보고 그대로 뒀다.
새 계산은 이렇게 판단한다
길을 하나 찾으면 그 길을 따라가며 벽과 가구까지의 거리를 처음부터 끝까지 다시 잰다. 한 군데라도 30cm보다 가까우면 그 길은 쓰지 않는다. 그래서 '연결됨'이 떴다면 그 길은 실제로 지나갈 수 있다. '막힘'이라고 할 때는 반대로, 혹시 설 수 있을지 모르는 자리까지 넉넉하게 열어 둔 상태에서도 길이 안 나는지 본다. 둘 다 확인이 안 되면 '검증 안 됨'이다.
세어 보면
이번 실험에서 틈이 60cm 이상인데 예전 계산이 막혔다고 한 경우가 21번 나왔다. 못 지나가는 틈을 지나간다고 한 경우는 0번이었다. 새 계산은 틀린 답이 0번, 미룬 답이 2번이다.
60cm는 이 사이트가 정한 기준이고 법적 기준이 아니다. 몸을 옆으로 틀면 더 좁은 틈도 지나가고, 빨래 바구니를 들면 60cm로는 모자란다.
데이터
| 틈 | 정답 | 예전 계산 | 새 계산 | 지나는 길의 가장 좁은 곳 (cm) | 결과 |
|---|---|---|---|---|---|
| 59cm | 막힘 | 미확인 | 막힘 | – | PASS |
| 60cm | 연결됨 | 연결됨 | 연결됨 | 60 | PASS |
| 61cm | 연결됨 | 연결됨 | 연결됨 | 61 | PASS |
| 63cm | 연결됨 | 연결됨 | 연결됨 | 63 | PASS |
| 68cm | 연결됨 | 연결됨 | 연결됨 | 68 | PASS |
| 틈 | 예전 계산이 통과시킨 위치 | 새 계산이 통과시킨 위치 | 결과 |
|---|---|---|---|
| 59cm | 0/10 | 0/10 | PASS |
| 60cm | 1/10 | 10/10 | PASS |
| 63cm | 4/10 | 10/10 | PASS |
| 68cm | 9/10 | 10/10 | PASS |
| 옷장 왼쪽 끝 | 가로 틈 | 모서리 사이 거리 | 예전 계산 | 새 계산 | 가장 좁은 곳 | 결과 |
|---|---|---|---|---|---|---|
| 206 | 84 | 87.1 | 연결됨 | 연결됨 | 80 | PASS |
| 195 | 73 | 76.5 | 연결됨 | 연결됨 | 75.2 | PASS |
| 190 | 68 | 71.8 | 연결됨 | 연결됨 | 69.9 | PASS |
| 185 | 63 | 67.1 | 미확인 | 연결됨 | 66.1 | PASS |
| 대각선 틈 (cm) | 정답 | 예전 계산 | 새 계산 | 결과 |
|---|---|---|---|---|
| 58 | 막힘 | 미확인 | 막힘 | PASS |
| 59 | 막힘 | 미확인 | 막힘 | PASS |
| 59.5 | 막힘 | 미확인 | 막힘 | PASS |
| 59.8 | 막힘 | 미확인 | 검증 안 됨 | PASS |
| 60 | 연결됨 | 미확인 | 검증 안 됨 | PASS |
| 60.1 | 연결됨 | 미확인 | 연결됨 | PASS |
| 61 | 연결됨 | 미확인 | 연결됨 | PASS |
| 63.6 | 연결됨 | 미확인 | 연결됨 | PASS |
정답은 어떻게 구했나. 가로막은 방은 "틈이 60cm 이상이면 지나간다"는 한 줄로 정답이 정해진다. 모서리끼리 마주 본 틈은 "모서리 사이 거리가 60cm 이상이면 지나간다"가 정답이다. 이와 별도로 플래너 코드를 쓰지 않는 Python 프로그램이 방 바닥에 1cm 간격으로 점을 찍고, 사람이 설 수 있는 점을 문에서부터 이어 가며 같은 결과가 나오는지 확인했다. 예전 계산 결과는 예전 규칙을 Python으로 다시 짠 것과 맞춰 봤다.
플래너에서 열기
- 벽에서 벽까지 막은 가구 사이 59cm 틈
- 벽에서 벽까지 막은 가구 사이 60cm 틈
- 벽에서 벽까지 막은 가구 사이 61cm 틈
- 벽에서 벽까지 막은 가구 사이 63cm 틈
- 벽에서 벽까지 막은 가구 사이 68cm 틈
- 배치 노트 사례, 옷장 왼쪽 끝 206
- 배치 노트 사례, 옷장 왼쪽 끝 195
- 배치 노트 사례, 옷장 왼쪽 끝 190
- 배치 노트 사례, 옷장 왼쪽 끝 185
사이트 저장소에서 아래 세 줄을 실행하면 이 파일들이 다시 만들어진다. 계산 코드를 고치고 이 파일을 다시 만들지 않으면 사이트가 만들어지지 않게 해 두어서, 글의 숫자와 플래너 계산이 어긋난 채로 올라가지 않는다.
node tools/run_experiments.mjs
python tools/verify_experiments.py