답이 하나뿐인 퍼즐은 어떻게 만들까

퍼즐에는 양보할 수 없는 조건이 하나 있습니다. 답이 반드시 하나뿐이어야 한다는 것입니다. 답이 둘이면 무슨 일이 벌어질까요. 규칙을 다 지켜서 판을 채웠는데 화면이 "틀렸다"고 합니다. 푸는 사람은 자기가 뭘 잘못했는지 끝내 알 수 없습니다. 규칙을 의심하게 되고, 결국 게임을 닫습니다.

반대로 답이 하나면 찍을 필요가 없어집니다. 판 어딘가에는 반드시 "여기 아니면 안 되는 자리"가 있고, 그걸 찾으면 다음 자리가 드러나고, 그게 도미노처럼 이어져 끝까지 갑니다. 잘 푸는 요령에서 말씀드린 순서가 통하는 것도 답이 하나이기 때문입니다.

만드는 순서는 거꾸로입니다

문제를 먼저 만들고 답을 찾는 게 아닙니다. 답을 먼저 놓고, 그 답이 나오도록 문제를 덮어씌웁니다.

  1. 수달을 먼저 앉힙니다. 빈 판에 수달 쌍을 규칙에 맞게 흩어 놓습니다. 서로 닿지 않게만 두면 되니 이건 쉽습니다.
  2. 구역으로 덮습니다. 각 쌍이 한 구역 안에 들어가도록 판 전체를 색깔 구역으로 나눕니다. 구역 모양이 매번 다른 건 이 과정이 무작위이기 때문입니다.
  3. 답이 몇 개인지 셉니다. 여기가 진짜 관문입니다. 방금 만든 구역 배치에 대해 규칙을 만족하는 배치가 몇 가지인지 컴퓨터가 전부 세어 봅니다.
  4. 둘 이상이면 버립니다. 그리고 1번부터 다시 합니다.

만들기는 쉽고, 검사는 어렵고, 대부분은 버려집니다. 퍼즐 생성은 창작이라기보다 체질에 가깝습니다. 수백 번 만들어 하나를 건집니다.

답을 세는 기계

답이 몇 개인지 세는 프로그램을 솔버라고 부릅니다. 짝꿍 수달의 솔버는 이렇게 움직입니다.

8×8 판이 계속 실패했던 이야기

단계가 올라가면 판을 키우고 싶어집니다. 그런데 8×8 판을 만들려고 하자 벽에 부딪혔습니다. 열두 번 시도해서 한 번도 성공하지 못했습니다. 만드는 족족 답이 여러 개였습니다.

이유는 이렇습니다. 판이 넓어지면 빈자리가 많아지고, 빈자리가 많으면 수달 쌍이 조금씩 움직여도 규칙을 어기지 않습니다. 움직일 여유가 있다는 건 곧 다른 답이 있다는 뜻입니다. 넓은 판은 그 자체로 답을 흐립니다.

해결책은 바위였습니다. 수달이 앉을 수 없는 칸을 판 안쪽에 몇 개 놓자, 빈자리의 여유가 사라지면서 답이 하나로 고정되기 시작했습니다. 121단계부터 연못에 바위가 나타나는 건 장식이 아니라 이 문제를 푼 결과입니다. 바위는 길을 막는 방해물이 아니라 답을 붙잡아 주는 못인 셈입니다.

왜 문제가 미리 들어 있나

이 과정을 휴대전화에서 하면 어떻게 될까요. 실제로 그렇게 만들어 봤더니, 36단계쯤부터 문제 하나를 여는 데 수십 초가 걸렸고 어떤 판은 2분 가까이 걸렸습니다. 화면만 보고 기다리는 2분입니다.

그래서 지금은 300개의 문제를 미리 만들어 앱과 함께 넣어 두었습니다. 만드는 데 오래 걸리는 건 만드는 사람 쪽 사정이지, 푸는 분이 기다릴 일은 아니니까요. 덕분에 어느 단계를 눌러도 곧바로 판이 뜹니다.

퍼즐 풀어 보기

이어서 읽기