マガジン

かたちのあいだの4×4は、なぜ3×3より急に難しくなるのか

遊びを見つける

執筆にClaudeを使用しています。

定番の盤面に一つだけ赤い通り道を加え、選択が変わる様子を描いた版画風イラスト。
記事のテーマをもとに制作したAI生成イラスト。

「かたちのあいだ」の3×3を何度か遊んで、「これなら解ける」と感じた後に4×4を開く場面を考えてみます。盤は縦横が1マスずつ増えただけです。それなのに、3×3のときのように「あと数手で形になる」という見通しが立ちません。この記事では、その手応えの変化がどこから来るのかを、数で確かめていきます。 答えを先に言うと、増えたのは「マスの数」ではなく「ありうる配置の数」です。3×3で到達できる配置は約18万通りです。4×4では約10兆通りになり、およそ5,800万倍です。一方で、最短で解くのに必要な手数の上限は、3×3の31手から4×4の80手へ、2.6倍ほどしか増えません。「配置の増え方」と「手数の増え方」のずれが、難しさの正体です。 この記事の数字は、スライドパズルについて一般に知られている数学的な事実です。「かたちのあいだ」の内部仕様ではありません。作品の設計については、公式に確認できた範囲だけを根拠に「設計から読み取れること」として書きます。最後には、読者が自分で確かめるための手順も用意しました。

この記事の目次
  1. 配置の数を計算する
  2. なぜ「半分」しか解けないのか
  3. 手数は2.6倍、迷いはそれ以上
  4. 4×4の中には3×3が入っている
  5. 設計から読み取れること
  6. 自分で確かめる実験の設計書
  7. 次の行動

配置の数を計算する

3×3のパズルには、数字8枚と空きマス1つがあります。9つの位置に並べる方法は 9! = 362,880 通りです。ただし、そのうち実際に到達できるのは半分だけです。そのため、到達できる配置は 181,440 通りになります。

4×4は、数字15枚と空きマス1つの16個を並べるので 16! = 20,922,789,888,000 通りです。同じように半分だけが到達でき、10,461,394,944,000 通り(約10.5兆)になります。

比にすると次のとおりです。

  • 並べ方の総数、3×3:362,880、4×4:約20.9兆
  • 到達できる配置、3×3:181,440、4×4:約10.5兆
  • 最短手数の上限、3×3:31手、4×4:80手

到達できる配置の比は 10×11×12×13×14×15×16 = 57,657,600 で、約5,800万倍です。マスの数は9から16へ1.8倍弱しか増えていません。並べ方は階乗で増えるため、わずかなマスの増加でも桁が大きく変わります。

なぜ「半分」しか解けないのか

到達できる配置が総数の半分になる理由を、簡単に説明します。数字のタイルは、空きマスと隣り合ったものを一枚ずつ滑らせることでしか動かせません。この動かし方では、並びの「偶奇」という性質が一手ごとに規則的に保たれます。そのため、どれだけ滑らせても行き着けない配置が、ちょうど半分できます。

有名な例が、完成形から2枚だけ入れ替えた配置です。見た目は完成形にほぼ近いのに、滑らせる操作だけでは決して完成しません。

遊ぶ側にとって大切なのは、盤が大きいほど「解けるが遠い配置」の置き場所が広いという点です。3×3なら、どの配置から始めても最長31手以内に決着します。4×4では、最短でも最大80手かかる配置が存在します。

手数は2.6倍、迷いはそれ以上

手数の上限は、3×3が31手、4×4が80手です。数字だけ見ると、難しさは約2.6倍に見えます。ところが、遊んでいる側が感じる難しさは、手数そのものよりも「次にどれを動かすか」の選択肢の広さと先読みの深さに左右されます。

選択肢の数を、動かせる隣の数で見てみます。空きマスが角にあるとき動かせるのは2通り、辺なら3通り、内側なら4通りです。

  • 3×3は、角が4マス、辺が4マス、中央が1マスです。空きマスの平均の隣接数は 24÷9 で約2.7です。
  • 4×4は、角が4マス、辺が8マス、内側が4マスです。平均は 48÷16 で3.0です。

1手あたりの分かれ道は少し増えるだけです。しかし、見通すべき手数が数十手に及ぶと、分かれ道の差が積み重なります。さらに、直前の手を戻す動きは役に立たない場合が多いので、実質的に意味のある選択肢はもう少し少なくなります。それでも、80手先まで見通す余地は人間にはありません。人は先読みを諦めて、別の方法で解くことになります。

4×4の中には3×3が入っている

人が4×4を解くとき、よく使われるのは「一段ずつ固める」方法です。上の1行をそろえ、次に左の1列をそろえると、右下に3×3の盤が残ります。この3×3は、入門で慣れた盤と同じ構造です。

つまり4×4は、3×3の難しさに「外側を固める工程」が加わった盤と考えられます。その工程には落とし穴があります。1行目の最後の2枚をそろえるときは、すでに置いた数字を一度崩さないと入らない場面が出ます。そのため、「そろったものを動かしていいか」を判断する場面が増えます。3×3の入門では、この判断の重さはほとんど出てきません。

設計から読み取れること

「かたちのあいだ」について公式に確認できているのは、次の点です。

  • 数字を順にそろえるスライドパズルで、3×3の入門と、4×4の2段階が用意されている。
  • 次の一手のヒントがあり、そのヒントは最短とは限らない。
  • 一手戻すことができ、戻しても手数は減らない。
  • 同じ配置で再挑戦できる。
  • 時計を一時停止できる。
  • 保存がある。

ここから読み取れることを、3点挙げます。

  1. ヒントが「最短とは限らない」と明記されている点。 盤が大きくなるほど、最短手順を厳密に求めるのは重い作業になることが一般に知られています。この注意書きは、大きな盤で起こる事情と整合します。ヒントは「正解の手順」ではなく「次に進む手がかり」として使う設計と読めます。
  2. 戻しても手数が減らない点。 手数は「結果の短さ」だけでなく、試行錯誤の量も映します。4×4では戻す回数が増えやすいので、手数の読み方に注意が必要です。
  3. 同じ配置の再挑戦、時計の一時停止、保存がある点。 長く考える盤を遊ぶための機能が揃っています。保存で何が残るのかは、作品を開いて確かめてください。

4×4の2段階が何で分かれているのかは、確認済みの情報にありません。作品を開いて確かめてください。

自分で確かめる実験の設計書

ここからは、読者が自分で行える形の手順です。結果はこの記事には書きません。

問い

同じ人が遊んで、4×4は3×3に比べて、手数は何倍になり、時間は何倍になるでしょうか。手数と時間の倍率が違うなら、その差は何を意味するでしょうか。

準備するもの

  • 「かたちのあいだ」の3×3と、4×4の同じ段階。
  • 記録用の紙か表計算ソフト。
  • ヒントを使わないという取り決め。

手順

  1. 3×3で1回遊び、手数と経過時間を記録します。ヒントは使いません。
  2. 同じ配置で再挑戦し、同じ項目を記録します。これを3×3で合計5回行います。
  3. 4×4でも同じ手順を5回行います。2段階あるので、どちらか一方に決めて統一します。
  4. 順序の影響を避けるため、3×3と4×4を交互に行う日を作ります。
  5. 時計を止めたいときは一時停止を使い、考え込みと休憩を混ぜないようにします。

記録の取り方

1回ごとに、次の4項目を記録します。

  • 手数
  • 経過時間(秒)
  • 戻した回数
  • 同じ配置での何回目か

結果の読み方

5回分の中央値を、3×3と4×4で出して比べます。

  • 手数の倍率が、およそ2〜3倍にとどまる。この場合は、最短手数の上限の増え方(31手から80手)と同じ方向の増え方です。
  • 時間の倍率が、手数の倍率よりかなり大きい。この場合は、動かす作業よりも、考える時間が増えたと読めます。
  • 同じ配置の再挑戦で、2回目以降の手数や時間が大きく減る。この場合は、配置を覚えたことの影響が出ています。倍率の比較には、1回目だけを使うのが安全です。
  • 戻した回数が4×4で目立って増える。この場合は、試して戻す探り方が増えたと読めます。

起こりやすい誤り

  • 3×3と4×4で、ヒントの使用有無がそろっていない。
  • 同じ配置の再挑戦の記録を、新しい配置の記録と混ぜてしまう。
  • 4×4の段階を途中で変えてしまう。
  • 戻しても手数が減らないことを忘れて、手数を「最短の目安」として読んでしまう。

配置の数を手元で確かめる

3×3の配置の数と最長手数は、ブラウザだけで確かめられます。次のコードを .html ファイルとして保存して開くと、完成形から空きマスを滑らせて、到達できる配置の数と、完成形から最も遠い配置までの手数を表示します。空きマスは「0」で表し、完成形は空きマスが右下の並びとしています。

html
<!doctype html><meta charset="utf-8"><body>
<script>
const goal = "123456780";
const seen = new Map([[goal, 0]]);
const queue = [goal];
let head = 0, maxDepth = 0;
while (head < queue.length) {
  const s = queue[head++];
  const d = seen.get(s);
  const z = s.indexOf("0");
  const r = Math.floor(z / 3), c = z % 3;
  for (const [dr, dc] of [[1,0],[-1,0],[0,1],[0,-1]]) {
    const nr = r + dr, nc = c + dc;
    if (nr < 0 || nr > 2 || nc < 0 || nc > 2) continue;
    const a = s.split("");
    a[z] = a[nr * 3 + nc];
    a[nr * 3 + nc] = "0";
    const t = a.join("");
    if (!seen.has(t)) {
      seen.set(t, d + 1);
      queue.push(t);
      if (d + 1 > maxDepth) maxDepth = d + 1;
    }
  }
}
document.body.textContent =
  "到達できる配置: " + seen.size + " / 最長の最短手数: " + maxDepth;
</script>

表示が 181440 と 31 になれば、この記事の3×3の数字と一致します。同じ方法で4×4を数えようとすると、約10.5兆通りを記憶に持つ必要があるため、ふつうのブラウザでは終わりません。この「やってみると終わらない」ことが、盤が1段大きくなる意味の実感になります。

次の行動

まず「かたちのあいだ」の3×3を同じ配置で数回遊び、手数と時間を記録してください。次に4×4で同じ手順を行い、中央値の倍率を比べます。ヒントは「最短とは限らない手がかり」として、使った回数も記録してください。4×4の2段階の違いや、保存される内容は、作品を開いて確かめてください。