Bombeとかいうゲームについての手記 その20
このnoteは私が淡々と頭の中を整理するために書くnoteです。
過度な期待はしないでください。
20回ということでそろそろBombeにまともに付き合う気もなくなってきたのでそろそろいろいろ別なことをやってみます。
まずこのゲームには2範囲のルール3範囲のルールというのがあります。
![](https://assets.st-note.com/img/1729247653-uMZbBmgRovSfCYl1HLzjUONV.png)
![](https://assets.st-note.com/img/1729247694-9oU2lhbrX5xJdC43ysNBHDLp.png)
もちろん1範囲とか4範囲もあるのですが、それはともかくとして今回は2範囲のルールすべてについて考えます。
まず2範囲のルールについては、爆弾の個数が確定していると指摘できる箇所が3つあります。Bombe記事を読んでくださっている方々にはおなじみかと思われますが、こんな感じです。
![](https://assets.st-note.com/img/1729247818-eNlua3QC2psFnic0wV9fO4gt.png?width=1200)
この3つの範囲にしか、何某かの事実を摘示することができません。ではこれらabcの組み合わせは何通りあるのでしょうか?
答えは無限通りです。少なくとも限界数はあるはずですが、infiniteルールが存在する以上、マス目は無限と見るべきです。なので最大数は無限としたいですが、ここでは爆弾の数は9個までとします。(10進数の制約)
さて、爆弾の数を9個までと定めると、すべてのパターンを書き出すことができるはずです。一体何パターンでしょうか?000~999までの1000パターンです。
すべて書き出しました。結果がこれになります。
![](https://assets.st-note.com/img/1729248112-tPCkeNDgyjoAwbG1RQSpI8a4.png)
さて、最大で爆弾が9個までのパターンはすべてのパターンを書き出すことができました。ではこれらを爆弾の個数に基づいて自動的に成立するかしないかを判断できるはずです。
前準備としてa+b,b+cを求めます。これらの値がそれぞれの情報と矛盾しなければ、その爆弾の個数は成立するというわけです。
![](https://assets.st-note.com/img/1729248335-j9FfnbDVP6eico0XraNdSu58.png)
さて、では実際に求めてみましょう。
![](https://assets.st-note.com/img/1729248810-Qu8kXmjPdJAKsVOWFnfS6EgN.png)
例えば左側が1であるとき、成立するのはa+bが1となる場合のみです。よってその場合のみTRUEを返すようになっています。これを爆弾が18個までやります。(a+bの最大値は18個)
![](https://assets.st-note.com/img/1729248830-QseANgbDk1avCnqmwoPr9yRl.png?width=1200)
できました。次に1-,1+の場合を求めます。
![](https://assets.st-note.com/img/1729248953-NcPe1DdGf7uW4Z9hnpKzC6ym.png)
そして0/1を求めます。0/1のパターンは、ゲーム通り9/10までとします。(実際には文字を使えばもっと対応していそうな気もしますが……)
![](https://assets.st-note.com/img/1729249439-hixa7XgFvcT61OfAD3GHqdWU.png?width=1200)
もちろん0/2,0/3も同様です。
![](https://assets.st-note.com/img/1729249991-ZjXck5i8uFoAyshM0r3SELN2.png?width=1200)
次に!の対応です。
![](https://assets.st-note.com/img/1729250153-q3ZEYBMGXKH5jtkbxPfsOavd.png?width=1200)
そして最後に2*の対応です。
![](https://assets.st-note.com/img/1729250629-miNerYUHjVQgwvO0AZIJBfaq.png)
そしてここまでで折り返し地点で、右側のルールも作ります。
最後に適当に入力部分を作って……。
![](https://assets.st-note.com/img/1729252530-Fxj5AmKqDURgzwh1TYMNLp3B.png)
![](https://assets.st-note.com/img/1729252542-SbfeM7R1hCQjUtrDOFEpK6uo.png?width=1200)
じゃじゃーん。これで2範囲のルールについては今後二度と内訳表を作らなくて済むようになりました。
動作確認も兼ねて既にあるルールを確認してみましょうか。
![](https://assets.st-note.com/img/1729252711-ld5HoJauEG7j4fnyrRZAOvYc.png)
こんなルールがあります。まず入力してみます。
![](https://assets.st-note.com/img/1729252767-QeHY8o5qpj01iAXSf3av2xsN.png)
すると表に反映されるので……
![](https://assets.st-note.com/img/1729253608-qlJBd2sYGoZtgRIFuVmzpXi9.png?width=1200)
まず両方がTrueの場合を見てみましょう。
![](https://assets.st-note.com/img/1729253621-9RisyKAWkqU6Sga8TwNf4Dom.png?width=1200)
このパターンしかありません。cに入る爆弾の個数はほぼ不定ですが、a,cが0の場合は最上段のパターンしか無いため、常に0です。
cが0の場合は常にbが0個になりますが、実はこのルールは改善できました。
![](https://assets.st-note.com/img/1729253753-RG83X0Qx7o1PC62uvdDjnMsg.png?width=1200)
aの個数は問わないのです。
![](https://assets.st-note.com/img/1729253773-oIXk1Ylxa4nbTChuKczOs7yN.png)
……そしてルール被りです。このルールは削除しておきましょう。
こんな事ができるようになりました。χを使用したときも考えてみましょう。
![](https://assets.st-note.com/img/1729253900-HgmNJB8FkRzcjbiPGSCMlD4f.png)
パット見ではちょっとよくわからなそうなルールにしました。まずルールに沿って入力してみます。
![](https://assets.st-note.com/img/1729253981-zHDYFcoOCjbGerXdisIawtUq.png?width=1200)
例として上記のルールに含まれる1-と1/3です。
含まれる以上はこのパターンでも成り立つものしかルール化できません。
両者がTrueのものは下記の通りです。
![](https://assets.st-note.com/img/1729254046-nSZrfNouOW3jgIH6yqkaCx9c.png?width=1200)
かなりパターン数が少ないです。cが1以下の時を見てみましょう。
![](https://assets.st-note.com/img/1729254145-lqHLOTswxyQEkBNv05jIbWct.png?width=1200)
3が1以下のとき、b+cは常に1です。このルールは少なくともこのパターンでは成り立っていることが確認できました。
しかし、このツールでは成り立っていることしか確認できないのでしょうか?いいえ、この場合このまま右の指定だけを変えてみれば色々と他にわかることがあります。
![](https://assets.st-note.com/img/1729254255-JgeltVCjkb2FAhWMnHTfX3LR.png?width=1200)
同条件の埋め方に対してまず2/4は対応していないことがわかります。2/4の場合に成り立つ場合はあるのでしょうか?
![](https://assets.st-note.com/img/1729254331-DhQwWZdxCUXq9u5JNbnH0YpE.png?width=1200)
もちろんあります。cが1以下であればこの場合も爆弾の内訳が確定します。ということは
![](https://assets.st-note.com/img/1729254411-PkJ0A7s6FZED1mpzXBKocida.png)
というルールが作れることになります。このように他のパターンに派生させるのが少しだけ楽になります。
実例を考えるのがなかなか面倒だったので今回はこんなことをしてみました。次回からは多分また盤面の検討に戻ると思います。