미로 이야기

11자 코드 하나로 어떻게 같은 미로를 다시 만들까요?

이 게임은 미로를 저장하지 않습니다. 여러분이 플레이하는 모든 미로는 짧은 코드에서 그 자리에서 다시 만들어집니다 — 서버에 미로 데이터를 보관하거나 전송하지 않는데도, 친구와 내가 정확히 같은 미로를 볼 수 있는 이유입니다.

이 페이지는 그 비밀인 시드, 미로 코드, 생성 알고리즘을 소개합니다. 수학이 조금 나오지만 가볍게 읽을 수 있게 썼어요.

시드 — 미로의 씨앗

미로는 난수(무작위 수)로 만들어지지만, 이 게임의 난수는 진짜 무작위가 아니라 시드라는 숫자에서 출발하는 의사난수입니다. 같은 시드에서 시작하면 난수열이 언제나 똑같이 재현되죠.

그래서 시드와 난이도만 있으면 미로 전체 — 벽의 배치, 시작점, 도착점 — 가 그대로 다시 만들어집니다. 어느 나라의 어떤 기기에서 열어도 결과는 비트 하나까지 같습니다. 소수점 오차가 끼어들지 않도록 생성기는 정수 연산만 사용해요.

미로 코드 해부하기

미로 코드는 M1-7-03NQK8N5처럼 생겼습니다. 하이픈을 빼면 정확히 11글자 — 맨 앞 M, 포맷 버전 1자, 난이도 1자, 시드 7자, 그리고 마지막 검사 문자 1자로 이루어져 있어요.

글자는 Crockford Base32라는 문자 집합을 씁니다. 숫자 0~9와 알파벳에서 I, L, O, U를 뺀 대문자들이죠. 헷갈리는 글자를 처음부터 제외해서 손으로 적거나 읽어 불러주기 좋고, 실수로 O를 적어도 0으로 알아서 해석해 줍니다. 소문자·하이픈·공백도 자유예요.

마지막 글자는 체크섬입니다 — 앞 글자들을 정해진 규칙으로 계산한 값과 대조해서, 한 글자 오타나 이웃한 두 글자를 바꿔 적은 실수를 전부 잡아냅니다. 잘못된 코드로 엉뚱한 미로가 열리는 일은 없어요.

미로가 자라나는 방법

생성 알고리즘은 Growing Tree(자라나는 나무)입니다. 한 칸에서 출발해 이웃 칸으로 통로를 뚫으며 나무처럼 자라나는데, 가장 최근 칸에서 계속 뻗으면 길고 구불구불한 복도가, 아무 칸에서나 뻗으면 갈림길이 많은 미로가 됩니다. 난이도에 따라 이 두 성향을 섞어요.

높은 난이도에서는 막다른 길 일부의 벽을 뚫어 순환로를 만듭니다. 벽을 한쪽 손으로 짚고 따라가면 언젠가 출구가 나오는 고전 공략이 통하지 않게 되죠.

시작점과 도착점은 미로 테두리에서 서로 가장 멀리 떨어진 두 칸으로 정합니다. 그리고 완성된 미로의 정답 경로가 난이도 기준보다 짧으면 정해진 규칙대로 다시 생성해요 — 이 재시도조차 결정적이라, 같은 코드는 언제나 같은 미로가 됩니다. 모든 미로는 반드시 풀 수 있다는 것도 생성 단계에서 보장됩니다.

난이도 1~20이 정하는 것

난이도는 미로의 크기와 성격을 함께 정합니다. 1단계는 8×8칸의 아담한 미로, 10단계는 40×40, 20단계는 무려 60×60칸입니다. 크기만이 아니라 복도의 구불거림, 갈림길 빈도, 순환로 비율, 정답 경로의 최소 길이가 함께 올라가요.

트래픽 0의 공유

미로를 공유할 때 오가는 것은 11자 코드뿐입니다. 공유 URL도, 인쇄물의 QR 코드도 미로 데이터가 아니라 코드가 담긴 주소만 담아요. 받는 쪽 브라우저가 코드로 미로를 그 자리에서 다시 만들기 때문에, 가장 큰 60×60 미로도 글자 11개로 전달됩니다.