マインスイーパの解きかけの盤面における各セルの地雷の確率を計算します。 基本は地道に全探索ですが、いろいろ工夫しているので結構高速で動きます。 理論的基礎はパズル的マインスイーパ攻略法研究 Study6を参考にしてください。
インストールは配布アーカイブを解凍するだけ、アンインストールは上記内容ファイルをフォルダごと消すだけ。
あらかじめマインスイーパはカラー表示にしておいてください。
マインスイーパが起動している状態で「確率計算」ボタンを押すと マインスイーパの画面を読み取り、確率を計算して、結果がマインスイーパの画面に反映されます。 色と確率の関係は以下の通りです。
■青(#0000FF) | 0% |
■水色(#00FFFF) | 10% |
■黄緑(#00FF00) | 20% |
■黄色(#FFFF00) | 50% |
■赤(#FF0000) | 100% |
これらの中間の確率なら、中間的な色になります。例えば5%なら■#007FFFです。 青っぽいほど確率が低い、緑っぽいほど平均的な確率、赤っぽいほど確率が高いと思ってください。 正確な確率は、セルにマウスを合わせると、確率解析のプログラムの確率欄に表示されます。
「詳細をファイルに出力」をチェックすると、 計算結果が同じフォルダにテキストファイルで保存されています。 2007-10-13_12-05-06.txtみたいな名前で保存されます。
一番下の大きいテキストエリアには確率計算の進行状況が出ます。 探索に時間がかかる場合は、探索状況が出力されます。 あまりにも時間がかかりそうな場合(滅多にないと思いますが)、 プログラムを強制終了するとかマインスイーパを一時的に最小化するとかの目安にしてください。
マインスイーパの画面の再描画がかかるとせっかく計算してつけた色が消えます。「確率を再プロット」ボタンを押すと、同じ色で着色することができます。
まずデータとなるテキストファイルを作成します。 テキストファイルの例としてdata1.txtを添付しているので参考にしてください。 1行目に半角数字で残り地雷数を書き、 2行目以降には012345678* (全角スペース)の11文字、または012345678fuの11文字(※1)を使って盤面の状態を記述してください。 0/0は周囲に地雷がないと確定しているセル(普通のマインスイーパ画面では窪んで数字が書かれないセル)、 */fは旗を立てているセル、 (全角スペース)/uは未確定のセルです。
計算が終わると、GUI版と同様のファイル名のテキストファイルに結果を保存します。
※1 半角スペースが混じっていると無視します。 要するに出力されたファイルからコピペするだけでデータファイルが作れるようにしたいわけです。
Ruby, VisualuRuby(仮称)をインストールしておいてください。(開発環境と同じバージョンの方が安全です。)mineprob.exe同等のGUI版の他、CUI版が存在します。
コマンドプロンプトでソーススクリプトのあるフォルダに移動し、GUI版の起動ならruby gui.rb、CUI版の起動ならruby cui.rb、と打てば起動します。あと、screen.rbを単体で起動すると画面定義ファイル(後述)を作成するのに便利かもしれません。screen.rbの単体起動の場合、ソースを開いて下の方を読んでください。
起動するとデータをどこから取得するか聞かれます。数字を入れてEnterを押してください。
マインスイーパ画面の場合は、次にどの画面定義ファイルを使うか聞かれます。数字を入力したら、GUI版と同様マインスイーパの画面からセルの状態を取得して確率を計算します。
テキストファイルの場合は、次にどのテキストファイルを読むか聞かれます。ファイル名を入力するとGUI版と同様にファイルに結果を書き出してくれます。
画面定義ファイルはYAML形式で作ります。YAMLの書き方自体についてはRubyist Magazine - プログラマーのための YAML 入門 (初級編)で勉強してください。
ファイルの拡張子は必ずymlにして、実行ファイルと同じフォルダに置けばプログラムに読み込まれるようになります。
YAMLがわかれば、付属のwinxp.ymlを見ればどういうように書くかおおよそ見当はつくと思いますが、一応解説します。