15퍼즐 규칙과 푸는 법
빈칸 옆 타일을 밀어 1부터 15까지 순서대로 세우는 퍼즐입니다. 규칙은 한 줄이라 누구나 바로 시작하지만, 아무렇게나 밀다 보면 맞춰 둔 줄이 도로 흐트러집니다. 어떤 순서로 잠가 나가는지가 이 퍼즐의 전부라서, 처음 잡는 사람이 읽을 부분부터 이동 수를 줄이는 단계까지 순서대로 실었습니다.
15퍼즐은 어떤 퍼즐인가
네 칸씩 네 줄, 모두 열여섯 칸인 판에 1부터 15까지 적힌 타일 열다섯 개가 놓이고 한 칸이 빕니다. 그 빈칸으로 이웃한 타일을 밀어 넣는 동작만 반복해서 타일을 번호 순서로 세우면 끝나는 퍼즐입니다. 타일을 집어 들거나 건너뛰어 옮기는 일은 없고, 판 밖으로 빼낼 수도 없습니다. 미끄러뜨리는 동작 하나만 있어서 슬라이딩 퍼즐이라고 부릅니다.
이 형태는 1880년 무렵 미국과 유럽에서 크게 유행하며 널리 알려졌습니다. 당시 14와 15만 서로 자리가 바뀐 판을 내놓고 되돌리면 상금을 준다는 광고가 돌았는데, 그 판은 아무리 잘 밀어도 절대 풀리지 않습니다. 수학자들이 곧 그 사실을 증명했고, 덕분에 이 퍼즐은 놀이인 동시에 순열의 성질을 보여 주는 교과서 예제로 남았습니다.
핵심은 이렇습니다. 타일 두 개의 자리를 딱 한 번 맞바꾼 배치는 원래 배치와 다른 쪽 세계에 속합니다. 미는 동작으로는 그 경계를 넘지 못하기 때문에, 타일을 손으로 집어 아무렇게나 늘어놓으면 절반은 풀 수 없는 판이 됩니다. 이 성질을 순열의 홀짝성이라고 부르며, 판을 어떻게 만드느냐가 왜 중요한지도 여기서 나옵니다.
기본 규칙
판이 어떻게 생겼나
가로 네 칸, 세로 네 줄입니다. 열여섯 칸 가운데 열다섯 칸에 타일이 있고 한 칸은 비어 있습니다. 빈칸은 없어진 타일이 아니라 작업 공간이라고 보는 편이 정확합니다. 움직일 수 있는 것이 그 한 칸뿐이라서, 실제로는 타일이 아니라 빈칸을 판 위에서 끌고 다니는 놀이에 가깝습니다.
어떻게 미나
빈칸과 위아래 또는 좌우로 맞닿은 타일만 움직입니다. 그 타일을 누르면 빈칸 자리로 들어가고, 타일이 있던 자리가 새 빈칸이 됩니다. 대각선으로는 밀 수 없고, 한 번에 두 칸을 밀 수도 없습니다. 그러니까 한 수는 언제나 타일 하나와 빈칸이 자리를 맞바꾸는 일입니다.
언제 끝나나
왼쪽 위 칸부터 오른쪽으로 1, 2, 3, 4가 오고 다음 줄이 5부터 8, 그다음 줄이 9부터 12, 마지막 줄이 13, 14, 15로 이어지며 오른쪽 아래 구석이 빈칸이면 완성입니다. 순서 제한도 시간 제한도 없어서 어느 타일을 먼저 데려오든 상관없지만, 나중에 볼 요령들이 알려 주듯 순서를 정해 두는 편이 훨씬 빠릅니다.
이 앱의 세부 규칙
여기부터는 이 앱이 실제로 하는 일입니다. 같은 15퍼즐이라도 앱마다 다른 부분이라 한 번 읽어 두면 헷갈릴 일이 줄어듭니다.
하루에 한 판, 모두 같은 판
판은 그날 날짜를 숫자 하나로 접어서 만듭니다. 같은 날 들어온 사람은 누구나 같은 판을 받고 날이 바뀌면 새 판이 열립니다. 날짜는 접속한 기기의 날짜를 그대로 쓰며, 화면을 열어 둔 채 자정을 넘겼다면 새로고침해야 다음 판이 나옵니다. 만드는 일도 푸는 일도 전부 브라우저 안에서 일어나서 서버로 오가는 기록이 없고 계정도 필요하지 않습니다.
언제나 풀 수 있는 판만 냅니다
앞 절에서 본 홀짝성 때문에, 타일을 무작위로 늘어놓는 방식으로 판을 만들면 절반쯤은 아무리 밀어도 안 풀리는 판이 나옵니다. 이 앱은 그 위험을 검사로 걸러 내지 않고 아예 생기지 않게 만듭니다. 완성된 정답 상태에서 출발해 실제로 가능한 밀기만 백스무 번 적용한 결과를 오늘의 판으로 내놓습니다. 정답에서 정당한 수로만 걸어 나온 자리이니 같은 길을 거꾸로 되짚으면 반드시 정답으로 돌아옵니다.
섞는 동안 방금 온 자리로 되미는 수는 빼 둡니다. 한 칸 밀고 곧바로 되돌리면 두 수가 서로를 지워 판이 덜 섞이기 때문입니다. 자동 검사도 이 부분을 따로 붙잡고 있어서, 시드를 백 개 만들어 각 판이 정말 풀 수 있는 배치인지 홀짝성 기준으로 확인합니다.
이동 수를 세는 법
화면 왼쪽 위 숫자는 판이 실제로 바뀐 횟수입니다. 빈칸과 맞닿지 않은 타일을 눌렀을 때는 아무 일도 일어나지 않고 이동 수도 그대로입니다. 헛손질이 기록에 쌓이지 않는 대신, 되돌리려고 한 칸 밀었다 다시 미는 왕복은 두 수로 셉니다. 밀 수 있는 타일은 흰 바탕으로 도드라지고 나머지는 흐린 회색이라 어디를 누를 수 있는지 눈으로 구분됩니다.
없는 기능
없는 것을 분명히 적어 둡니다. 다음 수를 알려 주는 힌트가 없고, 한 수 되돌리기가 없으며, 자동으로 풀어 주는 기능도 없습니다. 시간을 재지 않고 최소 몇 수로 풀 수 있는 판인지도 알려 주지 않습니다. 진행 저장 역시 없습니다. 새로고침하거나 창을 닫았다 열면 오늘의 같은 판이 처음 상태로 다시 시작되고 이동 수도 0으로 돌아갑니다. 중간까지 맞춰 두고 자리를 뜰 생각이라면 이 점을 감안해 주세요.
완성과 공유
열다섯 타일이 모두 제자리에 오는 순간 몇 수 만에 끝냈는지 나오고 공유 단추가 뜹니다. 이때부터는 타일이 잠겨서 더 밀리지 않습니다. 공유 문구를 누르면 날짜와 이동 수가 담긴 짧은 글이 복사되며, 완성 전에 눌렀다면 진행 중이라고만 적힙니다. 어느 타일이 어디에 있는지는 담기지 않으니 아직 푸는 사람에게 보내도 판이 새지 않습니다.
기본 요령
아래는 사람이 손과 눈으로 하는 일입니다. 앱이 대신 해 주지 않으니 직접 밀어야 하지만, 한 번 몸에 붙으면 어떤 슬라이딩 퍼즐에서도 그대로 쓰입니다.
타일 말고 빈칸을 보세요
초보와 숙련자를 가르는 첫 지점입니다. 옮기고 싶은 타일을 노려보면 손이 멈추는데, 빈칸을 그 타일의 어느 쪽으로 데려갈지 정하면 길이 보입니다. 타일을 오른쪽으로 한 칸 보내려면 빈칸이 그 타일의 오른쪽에 와 있어야 하고, 빈칸을 거기까지 돌리는 동안 이미 맞춰 둔 자리를 밟지 않는 우회로를 고르는 것이 한 수의 전부입니다.
윗줄부터 한 줄씩 잠그세요
1부터 4를 맨 윗줄에 세우고 나면 그 줄은 다시 건드리지 않습니다. 그다음 5부터 8을 둘째 줄에 세우면 남은 판이 네 칸씩 두 줄로 줄어듭니다. 판이 작아질수록 빈칸이 돌 수 있는 길도 좁아지니, 넓을 때 여유롭게 처리할 수 있는 윗줄을 먼저 끝내는 편이 이득입니다. 한 줄 안에서는 왼쪽부터 채웁니다.
줄 끝 두 칸은 함께 넣으세요
첫 줄에서 1과 2까지는 쉽게 들어가는데 3을 제자리에 먼저 넣으면 4가 들어갈 길이 막혀서 결국 3을 다시 밀어내야 합니다. 그래서 두 칸은 한 묶음으로 처리합니다. 3을 그 줄의 오른쪽 끝 칸에 두고 4를 그 바로 아래 칸에 세운 다음, 빈칸을 3의 왼쪽으로 데려옵니다. 이제 3을 왼쪽으로 한 칸, 4를 위로 한 칸 밀면 두 타일이 동시에 제자리에 들어갑니다. 둘째 줄의 7과 8도 똑같이 처리합니다.
고급 요령
위 두 줄을 잠그고 나면 판이 두 줄로 줄어드는데, 여기서 방식을 바꾸지 않으면 같은 자리를 맴돌게 됩니다. 앱에는 되돌리기가 없으니 밀기 전에 머릿속으로 한 번 그려 보는 편이 안전합니다.
마지막 두 줄은 세로로 봅니다
남은 여덟 칸을 가로 두 줄로 보지 말고 세로 네 쌍으로 보세요. 왼쪽 세로줄의 9와 13을 한 묶음으로 넣고, 다음 세로줄의 10과 14를 넣는 식입니다. 방법은 줄 끝 두 칸과 같은 모양을 90도 돌린 것입니다. 9를 왼쪽 아래 구석 칸에, 13을 그 오른쪽 칸에 세워 두고 빈칸을 9의 위로 데려온 뒤 9를 위로, 13을 왼쪽으로 밀면 둘이 함께 자리를 잡습니다.
마지막 네 칸은 회전입니다
세로 두 쌍을 잠그면 오른쪽 아래에 두 칸씩 두 줄, 그러니까 타일 셋과 빈칸 하나만 남습니다. 이 상태에서는 선택지가 사실상 없고 네 칸을 시계 방향이나 반시계 방향으로 돌리는 일만 남습니다. 한 방향으로 서너 번 돌려 보고 순서가 어긋나면 반대로 돌리세요. 이 판은 언제나 풀 수 있게 만들어졌으니, 앞의 열두 칸이 정확히 맞았다면 남은 셋은 회전만으로 반드시 제자리를 찾습니다.
이동 수를 줄이려면
이동 수가 늘어나는 가장 큰 원인은 빈칸의 헛걸음입니다. 타일 하나를 한 칸 옮기는 데 빈칸이 판을 크게 한 바퀴 돌면 그것만으로 여러 수를 씁니다. 그래서 다음에 옮길 타일을 하나가 아니라 둘까지 정해 두고, 첫 타일을 넣은 뒤 빈칸이 멈추는 자리가 두 번째 작업의 출발점이 되도록 순서를 잡습니다. 목표 타일을 몰아가는 방향과 빈칸이 도는 방향이 반대가 되게 잡으면 왕복이 눈에 띄게 줄어듭니다.
자주 막히는 부분
맞춰 둔 줄이 자꾸 깨질 때
다음 타일을 데려오려고 빈칸을 위쪽으로 돌리다가 완성된 줄을 통과시키면 그 줄이 흐트러집니다. 잠근 줄은 통행 금지 구역이라고 생각하고, 빈칸을 아래쪽이나 옆으로 우회시키세요. 실수로 한 칸을 건드렸다면 곧바로 되돌려 두는 편이 낫습니다. 되돌리기 기능이 없어서 나중에 어디서부터 어긋났는지 되짚기가 훨씬 어렵습니다.
줄 끝에서 두 타일이 서로 막을 때
가장 흔한 정체입니다. 마지막 두 타일 중 하나를 제자리에 먼저 넣어 두고 나머지 하나를 밀어 넣으려 하면 반드시 앞의 것을 밀어내야 합니다. 이럴 때는 아깝다고 붙들지 말고 제자리에 있던 타일을 일부러 빼서 앞서 설명한 세로 배치를 다시 만드세요. 두 칸을 함께 돌려 넣는 그 모양으로 돌아가는 것이 결국 가장 빠릅니다.
마지막 셋이 계속 돌기만 할 때
끝의 세 타일이 순서만 어긋난 채 빙빙 돈다면 회전 방향을 바꿔 보세요. 그래도 정렬되지 않는다면 남은 셋의 문제가 아니라 그 앞에서 잠갔다고 믿은 칸 하나가 실제로는 다른 번호일 가능성이 큽니다. 판을 왼쪽 위부터 번호 순으로 한 번 훑어 확인하시면 됩니다. 이 판 자체가 못 푸는 판일 걱정은 하지 않으셔도 됩니다.
진행이 사라졌을 때
새로고침했더니 판이 처음으로 돌아갔다면 고장이 아니라 저장 기능이 없기 때문입니다. 오늘 판은 날짜에서 나오므로 배치 자체는 아까와 같은 것이 다시 열립니다. 한 번에 끝까지 갈 만큼 시간이 있을 때 시작하시고, 자리를 뜰 일이 있다면 화면을 그대로 두는 편이 좋습니다. 날짜가 바뀌면 그날의 새 판이 열립니다.