直下マインスイーパーのシミュレーションをする
注意:前回の私の記事を読んでいない人は読んでからこの記事を読んでください。
前回私は下へ下へと無限に続くマインスイーパーを考えました。
今回はそれのシミュレーションをする回です。1列、2列、3列の時を考えましょう。
ルール
爆弾の入ったマスを開けてしまった時に、その上の段の段数がスコアになる。今回はその期待値を求める。全ての段は必ず1つ以上のマスが空いていて、かつ爆弾が入っていないのに開けていないマスがないようにする。なお、爆弾が入っているかはそれぞれのマスが50%で判定するため、1つの段の全てのマスが爆弾ということも起こり得る。
1列の場合

これは詰みですね。つまり50%の爆弾が入っていないマスを引き続ける必要があるということです。スコアは1/2で0、1/4で1、1/8で2、1/16で3…となっていくわけです。では期待値を求めましょう。期待値は数値×それが起こる割合で求められますから、1/4+2/8+3/16+4/32+5/64…=1です。これは1に収束するんですね。
2列の場合

爆弾がある場合はこの二通りですね。左のパターンは左のマスと右のマスどちらかに爆弾があるので50%でこのパターンになります。よって左のパターンになると1/2を当てる必要があります。それを当てたのちは普通に進められます。右のパターンは詰みです。では期待値を求めましょう。一段突破する確率は1/4(爆弾なし)+1/4(左のパターンで爆弾が入っていない方を当てる)=1/2です。つまりこれも1/2を当て続けるゲームなので1列の時と同じように期待値は1です。
3列の場合
本日の最難関です。1段だけで爆弾の配置は2^3で8通りあります。



これで全部です。解説しやすいように左上から順に、左から右へ、上から下へで番号を①〜⑧としておいてください。(つまりノートを書く時と同じ順番です。)爆弾の配置ごとに数字が変わっているので、さっきと違って最初から運ゲーにはならないです。ここで重要なのは爆弾で数字が隠れて下の段の特定が難しくなるということです。例えば④の後の段は真ん中が爆弾で見えないですから、④の111と⑦の121の区別がつかないですよね。④は真ん中に爆弾1つ、⑦は両端に爆弾なのでこれは完全に運です。ではそれぞれのパターンでこれを考えていきましょう。
①の後の段
①の後はそのままなので突破率100%です。
②、③の後の段
②の後は左のマスがわからなくなります。それでも①、②、⑥は判断できます。⑧は判断できますが避けようがないです。③、④の区別がつかなくなったときは、④だと決め打ちして真ん中以外を開けます。それは④の方がその後の突破率(つまり都合)がいいからです。どちらも確率は同じですからね。⑤と⑦の区別がつかなくなったときはどっちでも変わりませんが⑦にしておきましょうか。これに従うと①、②、④、⑥、⑦の場合で突破できるので突破率は5/8です。③は左右対称になるだけで突破率は変わりません。
④の後の段
④の後は真ん中のマスがわからなくなります。それでも①、②、③、⑤、⑥は判断できます。⑧は判断できますが以下略。④と⑦の区別がつかなくなったときは、④だと決め打ちします。先ほどと同じ理由です。これに従うと①、②、③、④、⑤、⑥の場合で突破できるので突破率は3/4です。
⑤、⑥の後の段
⑤の後は左と真ん中のマスが分からなくなります。どれも判断できないです。①と②の区別がつかなくなったときは①だと決め打ち、③、④、⑤、⑦の区別がつかなくなったときは④だと決め打ちします。その後の突破率が高くなるからです。⑥と⑧の区別がつかなくなったときは⑧だと詰みなので⑥に賭けるしかないですね。これに従うと①、④、⑥の場合しか突破できません。よって突破率は3/8です。⑥は左右対称になるだけで突破率は変わりません。
⑦の後の段
⑦の後は両端のマスが分からなくなります。①は判断できます。⑧は判断できますが以下略。②、③、④の区別がつかなくなったときは④だと決め打ち、⑤、⑥、⑦の区別がつかなくなったときはどれも同じですが⑦だと決め打ちします。これに従うと①、④、⑦の場合しか突破できません。よって突破率は3/8です。
⑧の後の段
そんなものはないです。
最後にシミュレーションしてみよう
期待値を求める時に、これを計算することは不可能です。なのでシミュレーターを使って期待値を求めます。turbowarpでシミュレーターを作りました。爆弾の配置にあたる1〜8の乱数を出力し、先ほど作ったフローチャートに従って進めて、スコアをどんどん記録するものです。5万回やった結果の期待値は約2.35段でした。これでやっと3列の場合が終了しました。この記事もここで終わりです。お疲れ様でした。