3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ダッジェム(Dodgem)— 5×5 の 2.4 億局面を後退解析で解き、1996 年のニュースグループの主張を全部確かめたら 3 か所ずれていた

3
Posted at

ダッジェム(Dodgem)をブラウザに実装した。n×n の盤で、青は左端から右へ、赤は下端から上へ車を走らせ、自分の車を全部盤の外へ出した方が勝ち。ただし相手が 1 手も指せなくなる手を指したら負け。3×3 は先手必勝で、4×4 と 5×5 は 1996 年に David desJardins がニュースグループで「引き分け(車が永遠に横へ逃げ続ける)」と報告している。コンピュータは 3×3 と 4×4 の全局面をその場で解き、ヒントを付けると全部の手に「勝ち・引き分け・負け」と残り手数が付く。裏側では 5×5 の 2 億 4,006 万局面(手番込み)を Node で 323 秒で解き、1996 年の rec.games.abstract のスレッドと GamesCrafters の数字を全部確かめ直した。3×3 の到達可能局面 1,963(勝ち 1,123・負け 840)、Fleury の 666、4×4 と 5×5 の引き分け、「1. b1-a1 は 4×4 では負けで 5×5 では引き分け」はすべて一致した。ずれたのは 3 か所で、Erickson が描いた「後手勝ちの 3 局面」の 3 つ目は実は先手勝ち、Erickson の局面数は 2×2 以外が合わない、そして desJardins の引き分けの棋譜では O の 1 手目 a4-b4 が 38 手で負けだった。テスト 16 件。ソルバー内蔵パズル第 87 弾。

デモ: https://sen.ltd/portfolio/dodgem/
リポジトリ: https://github.com/sen-ltd/dodgem

Dodgem

ルール

Colin Vout が 1972 年に考案し、『Winning Ways』で紹介されたゲーム。

  • n×n の盤。各自 n−1 台の車を持つ。
  • 青は左端の列(左下の角を除く)に並び、右・上・下のどれかへ 1 マス動く。
  • 赤は下端の行(左下の角を除く)に並び、上・左・右のどれかへ 1 マス動く。
  • 他の車がいるマスには入れない。取ることはない。
  • 盤の外へ出られるのは前進方向の端だけ(青は右端から、赤は上端から)。出た車はゲームから消える。
  • 自分の車を全部外へ出した方の勝ち。
  • 相手に合法手を 1 つも残さない手を指したら、その人の負け。言い換えると、手番が来たのに動けない人は勝ち。
  • 青が先手。

最後の規則が効いている。相手を閉じ込めて勝つのではなく、閉じ込めたら負けになる。だから「相手の通り道をふさぐ」は、やりすぎると自分の首を絞める。

3×3 は先手必勝、4×4 以上は引き分け

3×3 は先手必勝で、『Winning Ways』には全局面の勝敗表が載っている。ここまでは古くから知られている。

それより大きい盤については、1996 年 3 月にニュースグループ rec.games.abstract で「"Dodgem" . . . any info?」というスレッドが立った(David Eppstein が自分のサイトに保存している)。Jeff Erickson が局面数を数え、David desJardins が 4×4 と 5×5 を全部解いて「どちらも引き分け」と報告し、ほかにもいくつか具体的な数字や局面が書き込まれた。

今回の作業は 2 つ。

  1. 完全プレイヤーと対戦できるページを作る。
  2. このスレッドに書かれた数字と局面を、一つ残らず計算し直す。

ソルバー: 車の台数で層に分けて、後ろ向きに解く

局面の数え方

局面は「青の車の位置」「赤の車の位置」「手番」の 3 つで決まる。盤は 5×5 でも 25 マスなので、車の位置はそれぞれ 32 ビット整数のビットマスク 1 個で持てる。

車は一度出たら戻ってこない。したがって、盤上の台数 (青 a 台, 赤 b 台) は減る一方で、どの手も

  • 同じ層 (a, b) に留まる
  • 青が 1 台出て (a−1, b) に落ちる
  • 赤が 1 台出て (a, b−1) に落ちる

のどれかになる。そこで台数の少ない層から順に解けば、層の外へ出る手の行き先はいつも解き終わっている。

層 (a, b) の中では、青の a 台は 25 マスから a 個を選ぶ組合せ、赤の b 台は残りの 25−a マスから b 個を選ぶ組合せになる。どちらも組合せ数系(colex 順)で 0 から隙間なく番号が付くので、層全体を

index = (rank(青) × C(25−a, b) + rank(赤)) × 2 + 手番

という 1 本の配列に詰められる。ハッシュ表は使わない。5×5 の最大の層(4 台対 4 台)は 2 × C(25,4) × C(21,4) = 151,420,500 局面になる。

ループがあるので、前からは解けない

Chomp やハノイの塔と違い、Dodgem の車は横に動ける。同じ層の中で局面が循環するので、「行き先を全部解いてから自分を解く」という順番が存在しない。引き分けがあるのもこのせいだ。

そこで後退解析(retrograde analysis)を使う。

  1. 種まき: 層の全局面について合法手を生成する。動けない局面は手番側の勝ち(深さ 0)。層の外へ出る手は、下の層の値を引く。行き先に「相手の負け」があれば勝ち候補、全部が「相手の勝ち」なら負け候補にする。層の中へ行く手の数を数えておく。
  2. 深さ順に広げる: 深さ d の局面を確定したら、その局面へ 1 手で来られる局面(前の局面)を全部作る。
    • 確定したのが負けなら、前の局面は深さ d+1 の勝ち。
    • 確定したのが勝ちなら、前の局面のカウンタを 1 減らす。0 になったら、全部の手が相手の勝ちに行くので負け。深さは一番長く粘れる手に合わせる。
  3. 最後まで値が付かなかった局面は引き分け。どちらも勝ちを強制できず、車が永遠にうろうろする。

前の局面は、車を 1 台「逆向きに動かす」と作れる。青なら左・下・上へ、赤なら下・右・左へ戻す。逆向きの手で層の外から車が入ってくることはないので、前の局面は必ず同じ層に収まる。

深さは「最善を尽くしたときに終局まで何手かかるか」(勝つ側は最短、負ける側は最長)で、コンピュータはこれを見て指す。勝ちの局面で勝ちの手を適当に選ぶと、深さが減らない手を選び続けてぐるぐる回ることがあるので、最短の勝ちを選ぶ必要がある。

計測

Node 26、12 コアの Mac mini、1 スレッド。

盤 局面数(手番込み) 解く時間
3×3 2,846 13 ms
4×4 555,986 0.86 秒
5×5 240,060,402 323 秒

5×5 の時間の大半は最後の層で、(3,4) と (4,3) が各 46 秒、(4,4) が 204 秒だった。到達可能局面の集計まで含めると 629 秒、最大メモリは 928 MB。値 1 バイトと深さ 2 バイトを全層ぶん、カウンタ 1 バイトを解いている層のぶんだけ持っている。

ページでは 3×3 と 4×4 をその場で解く。4×4 でも 1 秒かからないので、局面表を配る必要がない。

公表されている数字と突き合わせる

主張 出典 結果
3×3 は先手必勝 『Winning Ways』 一致。19 手で勝つ。勝てる初手は角から一番遠い車を進める 1 手だけ
3×3 の到達可能局面は 1,963、手番側の勝ち 1,123・負け 840、引き分けなし GamesCrafters(Wikipedia 経由) 完全一致
対称性で半分にすると、3×3 の合法局面は 666 Marc Fleury(1996-03-04) 一致。両者とも 1 台以上盤上にある局面 1,332 の半分
3×3 で後手が勝つ局面は 3 つ(鏡映を含めて 6 つ) Jeff Erickson(1996-03-04) 6 つは一致。ただし図の 3 つ目が違う(後述)
2×2〜5×5 の合法局面は 21 / 1,495 / 303,433 / 197,841,801 Jeff Erickson(1996-03-11) 2×2 しか合わない(後述)
4×4 の開始局面と「一番簡単な引き分け局面」は引き分け David desJardins(1996-03-18, 19) 一致
1. b1-a1 は 4×4 では負け、5×5 では引き分け desJardins(1996-03-20) 一致。4×4 では 38 手で負け
5×5 は引き分け desJardins(1996-03-20) 一致
5×5 の局面の約 40% は引き分け desJardins(1996-03-20) 両者が盤上にいる局面の 35.7%、開始局面から到達できる局面の 32.1%
4×4 の引き分けの棋譜。「!」は唯一の引き分け手 desJardins(1996-03-19) 「!」の 3 手はすべて正しい。ただし O の 1 手目が負け(後述)

GamesCrafters の 1,963 / 1,123 / 840 が手番込みで 1 局面もずれずに出たので、規則の解釈(特に「相手を動けなくしたら負け」と「全部出したら勝ち」の優先順位)は合っていると判断した。

desJardins の記法は盤の向きが逆で、X が下端から上へ進む先手、O が左端から右へ進む後手になっている。盤を反対角線で折り返すと青と赤がそのまま入れ替わるので、変換関数を 1 つ書いて棋譜を再生している。

ずれ 1: Erickson の 3 つ目の図

Erickson は 3×3 の後手勝ち局面(どちらが先に指しても、指した方が負ける局面)を次のように描いた。> が青、^ が赤。

. > >     > . .     > > .
. . ^     ^ . .     . . ^
. . .     . . .     . . ^

数は合う。全局面を分類すると、どちらが先手でも後手が勝つ局面はちょうど 6 つで、3 組の鏡映ペアになっている。1 つ目と 2 つ目の図もその中にある。

ところが 3 つ目の図は、印刷されたとおりに読むとどちらが先に指しても先手が勝つ(13 手)。本当の 3 組目は

> > .     . . .
^ ^ .     . > ^
. . .     . > ^

の 2 つで、印刷された図は左の局面から青を、右の局面から赤を取った形になっている。元の投稿は等幅の ASCII 図で、行ごとに字下げがずれているので、どこかで写し間違えたのかもしれない。

ずれ 2: Erickson の局面数

Erickson は「n×n 盤の合法局面」を数えて、次の値を出している。

n Erickson 各色 n−1 台以下を別々のマスに置く数
2 21 21
3 1,495 1,423
4 303,433 277,993
5 197,841,801 120,030,201

右の列は、0 ≤ a, b ≤ n−1 について C(n², a)·C(n²−a, b) を足したもの。「片方か両方の車が全部出た局面も含め、対称性は考えない」という彼の説明どおりに数えるとこうなる。Erickson の値はこれより大きい。車をマスに置く方法の総数より多いので、何か別のものを数えている。手番を含めると 2,846 / 555,986 / 240,060,402 になり、これも違う。投稿には式が書かれていないので、ここで止めた。合うのは 2×2 の 21 だけ。

ずれ 3: desJardins の棋譜の 1 手目

desJardins は 4×4 の開始局面が引き分けだと分かった後、「両者が最善を尽くした例」として 12 手の棋譜を載せている。「!」は唯一の引き分け手。

1. d1-d2 a4-b4     2. d2-d3 b4-c4     3. d3-d4 a3-b3
4. c1-c2 c4-c3!    5. b1-b2 a2-a3!    6. c2-d2 c3-c2
7. d2-d3 a3-a2     8. d3-c3 a2-a3!    9. b2-a2 b3-b2
10. c3-c4 c2-c1   11. d4-off c1-c2   12. d3-off b2-b3

これを 1 手ずつ再生し、各局面の値と「引き分けになる手が何個あるか」を数えた。

  • 「!」の 3 手(4… c4-c3、5… a2-a3、8… a2-a3)は、どれもその局面で引き分けになる唯一の手だった。
  • 12 手目の「d3-off」は、その時点で d3 に車がいないので指せない。直後に載っている図と合うのは c4-off で、書き間違いだろう。
  • 問題は 1 手目。1. d1-d2 の後、O には 4 つの手がある。
O の手 結果(O から見て)
a2-b2 引き分け
a3-b3 引き分け
a2-a1 32 手で負け
a4-b4(棋譜の手) 38 手で負け

a4-b4 の後は X の 2. c1-c2 で勝ちが決まる。棋譜の 2. d2-d3 はこれを逃して引き分けに戻している。つまりこの棋譜は「両者最善」ではなく、O の悪手と X の見落としがちょうど打ち消し合った棋譜だった。3 手目以降の局面はすべて引き分けで、「!」の判定も全部合っているので、desJardins の表そのものは正しく、例を手で書くときに 1 手目を選び間違えたのだと思う。

38 手は長い。手で読み切れる長さではなく、表を引かないと気づけない。

ほかに分かったこと

  • 3×3 の初手は 3 通りあり、勝てるのは角から一番遠い車を前に出す手だけ。残りの 2 手は 18 手と 16 手で負ける。スレッドで David Boll が「外側の端の車から動かして、それを常に外側に保てば先手が有利」と書いているのと合う。
  • 最善を尽くしても終わるまでに一番長くかかる勝ち局面は、3×3 で 21 手、4×4 で 42 手、5×5 で 81 手。
  • 5×5 では、開始局面からの 5 通りの初手が全部引き分けになる。desJardins が「ひどい手」と呼んだ角への 1. b1-a1 も含めて。
  • 開始局面から到達できる局面は、4×4 で 393,900 のうち 35,281(9.0%)、5×5 で 164,308,067 のうち 52,703,322(32.1%)が引き分け。盤が大きいほど引き分けが増える、という desJardins の見立てどおり。
  • どちらが先に指しても後手が勝つ局面は、3×3 で 6、4×4 で 14、5×5 で 36 しかない。

対戦画面

  • 盤の大きさ(3×3 / 4×4)と自分の色を選ぶ。青が先手。
  • 自分の車をクリックすると行き先に印が出る。ヒントを付けていると、印に「W12」(12 手で勝ち)、「L30」(30 手で負け)、「=」(引き分け)が付く。車を選んでいないときは、全部の手が小さな色付きの点で表示される。
  • 盤の外へ出る手は、盤の上(赤)と右(青)の点線の枠に印が出る。
  • コンピュータは勝てるなら最短で勝ち、負けるなら最長で粘り、引き分けなら引き分けの手の中から無作為に選ぶ。
  • 4×4 で同じ局面が 3 回現れたら、ステータスにそう表示する。終局は強制しない。

テスト

16 件。主なもの:

  • 独立なソルバーとの全局面照合。層分けも組合せ数系も逆向きの手も使わず、Map に全局面を入れて「勝ちの行き先があれば勝ち、全部が勝ちなら負け」を収束まで繰り返すだけのソルバーを別に書いた。同時更新で反復すると、t 回目に決まった局面の深さはちょうど t になる。3×3 の 2,846 局面と 4×4 の 555,986 局面すべてで、値と深さが一致する。
  • 反対角線で折り返して色と手番を入れ替えると、値と深さが変わらない。
  • 勝ちの局面には深さ −1 の負けへ行く手があり、負けの局面の手は全部相手の勝ちへ行く。
  • GamesCrafters の 1,963 / 1,123 / 840、Fleury の 666、Erickson の 6 局面と 3 つ目の図のずれ、desJardins の主張と棋譜(「!」、d3-off、1 手目)。
  • 3×3 でコンピュータが先手を持つと、赤のどんな応手に対しても勝つ(全分岐を試す)。

まとめ

  1. Dodgem は車が一度出たら戻らないので、台数で層に分けて少ない方から解ける。層の中はループがあるので、深さ順の後退解析で勝ち・負け・引き分けと手数を出した。
  2. 5×5 の 2 億 4,006 万局面は Node 1 スレッドで 323 秒、928 MB。
  3. 1996 年のスレッドの主張は大部分が再現した。4×4 と 5×5 は引き分け、1. b1-a1 は 4×4 で負け 5×5 で引き分け、GamesCrafters の 1,963 / 1,123 / 840 と Fleury の 666 は完全一致。
  4. ずれは 3 か所。Erickson の後手勝ち 3 局面の図の 3 つ目は先手勝ち。Erickson の局面数は 2×2 以外合わない。desJardins の引き分けの棋譜では、O の 1 手目 a4-b4 が 38 手で負けで、X の 2 手目がそれを見逃している。

参考文献:

  • "'Dodgem' . . . any info?"、rec.games.abstract、1996 年 3 月(David Eppstein によるアーカイブ)、https://www.ics.uci.edu/~eppstein/cgt/dodgem.html(2026 年 10 月 17 日参照)
  • E. R. Berlekamp, J. H. Conway, R. K. Guy, Winning Ways for your Mathematical Plays, 2nd ed., Vol. 3, A K Peters, 2003
  • M. Gardner, "Mathematical Games", Scientific American, 1975 年 6 月
  • Wikipedia "Dodgem"(GamesCrafters の数字の引用元)、https://en.wikipedia.org/wiki/Dodgem(2026 年 10 月 17 日参照)

デモ: https://sen.ltd/portfolio/dodgem/
リポジトリ: https://github.com/sen-ltd/dodgem

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?