ソフト関連Trial−No.102
        イラストパズル難問解法ツール 「MiniIllustPuzzle」

トップページへ

 はじめに

ソフト関連Trial100でイラストパズル解法ツール「MyIllustPuzzle」 (以下、前ソフト)を公開した後、イラストパズル自体の作成を計画しました。
まず先人の方々の作品を参考にするべくウエブサイトを閲覧していたところ、 かなり難度の高い問題を数多く掲載しているサイトがあることに気づきました。
そこに掲載されている中難度以上の問題の大半は作者の脳力ではとても解けず、思い余って前ソフトを利用してパズル解きを試みたのですが、 それを使用しても解を得られない問題が多数ありました。
前ソフトを公開してから1ヶ月もたたずに、世間の厳しさと自分の未熟さを味わった次第です。
そこで、この挫折感を払いのけるべく、これらの難問を解くツール開発への取り組みを開始し、 なんとか使えるレベルかと思える段階まできたので、前ソフトの改良版、補助版ということで公開をすることにしました。
今回の「MiniIllustPuzzle」(以下、本ソフト)も前ソフトと同様にイラストパズルを解くためのツールですが、 後述するように使用者が全て手動で操作をする通常のパズルとして使用することもできます。
なお、当初考えていたイラストパズル自体を作る試みは、当分先送りとすることにしました。

 本ソフトと前ソフトの対比

本ソフトと前ソフトには、異なる点が4つあります。
第1の相違点は、前ソフトではパズル解きを全てパソコンの自動操作で行いましたが、 本ソフトでは自動操作に加えて使用者が手動でセルの状態を指定できるようにした点です。
従ってパソコンによる自動解法操作を使わずに、使用者がセルの状態を全て手動で決める通常のパズル遊びの形で、本ソフトを使うこともできます。

第2の相違点は、本ソフトのメイン画面に設定数列(問題で指定される各行・列の数の並び) の部分を設けた点と、メイン画面の一部ボタンのテキストを変更した点です。
これは、第1の相違点のように使用者がセルの状態を指定する際に、画面に設定数列が表示されていることが必要なためです。

第3の相違点は、パズルのサイズ(行×列)です。
前ソフトは60行×120列までの比較的大型の問題にまで対応できるものでしたが、 本ソフトでは30行×30列までの小型サイズの問題を対象にしました。
サイズを小型に限定した理由は、第2の相違点に挙げた設定数列部分のスペースを確保することと、 難問掲載サイトの問題サイズがこのサイズまでであったことです。

第4の相違点は、timespanの使い方です。
前ソフトではtimespanを0.1秒として処理を開始し、以後自動的にtimespanを増やすようにしていました。
本ソフトでは1秒のtimespanで自動解法操作を開始し、そのtimespan内で全セルを既決にできない場合には、 timespanを増加するかを問合せるメッセージが表示されるようにして、 通常はメッセージが表示された時点で処理の停止を選択します。
これは、本ソフトが扱う小型サイズの問題では、ほとんどの場合に1秒のtimespanで全セルの状態(「黒」の既決、 「黄」の既決、未決のいずれか)が決まるからです。
注)前ソフトのページでは、既決のセル状態の記述を「黒」または「白」としていましたが、 本ソフトでは画面で使用される実際のセル色にあわせて、「白」を「黄」と表現することにしました。
そして、timespan1秒で全セルを既決にできない場合には、後述する背理法の操作と組合わせて残ったセルの状態を決定していきます。

 本ソフトウエアの構成画面

本ソフトでも前ソフトと同様に、パズルの問題に相当する設定数列を入力する画面(初期設定画面)と、 パズルの進行状況を表示する画面(メイン画面)とを、別々に構成しました。

初期設定画面
初期設定画面の構成は、第1図のように前ソフトと同一の形式です。
初期構成画面
                  第1図 初期設定画面

メイン画面
メイン画面
             第2図 メイン画面

本ソフトのメイン画面は、第2図のように本体部と行・列の設定数列表示部から構成されています。
本体部のセル部分をクリックすると、そのセルの色と状態を以下のように変更することができます。
 1.未決セル(グレー色セル)をクリックした場合
  1−1.左クリックの場合
    セルの色:グレー ⇒ 青色に変更。
    セルの状態:未決 ⇒ 既決(「黒」の状態)に変更。
  1−2.右クリックの場合
    セルの色:グレー ⇒ 薄緑色に変更。
    セルの状態:未決 ⇒ 既決(「黄」の状態)に変更。
 2.既決セル(黒・黄・青・薄緑色セル)をクリックした場合(右・左クリックにかかわらず)
    セルの色:各色 ⇒ グレー色に変更。
    セルの状態:既決 ⇒ 未決に変更。
画面中のボタンのクリックによって以下の操作が行われます。
 [試行]ボタン:表示されている本体部の状態からスタートして、前ソフトのTry1〜4と同様のセル状態決定操作が行われます。
 [確定]ボタン:本体部に表示されている状態を保存します。
   なお、本体部に青色または薄緑色のセルが存在する場合には、
     青色セルは黒色セルに、
     薄緑色セルは黄色セルに
   置き換えられた後に保存操作が行われます。
 [リセット]ボタン:本体部の表示を直近の確定状態に戻します。
 [クリア]ボタン:本体部の全セルを未決状態に戻します。
 [チェック]ボタン:全セルが既決となった後、結果の正しさを確認します。

 本ソフトで使用する解法アルゴリズム

本ソフトの解法では、前ソフトで使用した四段階の試行アルゴリズムに加えて、背理法(帰謬法)のアルゴリズムを用います。
背理法は現在、高校1年の数学Aで教えられているようですが、それを言葉だけで説明するよりは実例を用いて紹介した方がわかりやすいので、 第2図に例示した問題の実例を使って説明していきます。

背理法試行例1
第2図のメイン画面で[試行]ボタンをクリックすると、前ソフトの[実行]ボタンとほぼ同一の処理が行われますが、 問題の難度が高いために全セルを既決とするには至らず、途中で、
  『timespan 1秒での試行を終了しました。(改行) ここで試行を停止しますか?』
というメッセージが表示されて処理は停止します。
ここで[OK]ボタンをクリックすると、第3−1図の途中画面1となります。
途中画面1
             第3−1図 途中画面1

この段階で、[確定]ボタンをクリックして、画面の状態を確定、保存します(確定状態1)。

ここから、第3−1図画面の22行25列目のセルを対象にして、背理法の操作を行います。
画面22行25列目のセルを左クリックすると、対象セルの色は第3−2図のように青色に変わります。
青色は、使用者がそのセルの状態を「黒」の既決状態と仮定したことを意味しています。
背理法試行1
            第3−2図 背理法試行1

ここで[試行]ボタンをクリックすると、画面上である程度のセルの色が黒色または黄色に変わった後、
  『異常が発生しました。(改行) 入力されたデータに問題がないか、確認をしてください。』
というエラーメッセージが表示されて、第3−3図の状態になります。
背理法試行1の結果
          第3−3図 背理法試行1の結果

上記エラーメッセージが表示されるのは、初期設定画面で入力された設定数列が不適切な場合か、 実施した試行が背理法の「偽」の行為に相当する場合か、のいずれかであって、この例では後者の場合になります。
従って、第3−2図とした行為、すなわち使用者が22行25列目のセルの状態を「黒」と仮定した行為は誤った「偽」の行為であり、 このセルの状態は「黄」とされなければなりません。
そこで、以下のようにして、このセルの状態を「黄」に戻します。
第3−3図の状態で[リセット]ボタンをクリックすると、直近の確定状態である第3−1図の途中画面に戻ります。
第3−1図の途中画面に戻ったところで、今回は22行25列目のセルを右クリックしてセル色を薄緑色に変えます。
そして[確定]ボタンのクリックで、このセルの状態を「黄」として確定します(確定状態2)。

背理法試行例2
途中画面2
             第4−1図 途中画面2

第4−1図の途中画面2は、上記確定状態2の後、[試行]、[確定]ボタンのクリックで得られた状態を示したものです(確定状態3)。
ここから、第4−1図画面の1行16列目のセルを対象にして、背理法2の操作を行います。
画面1行16列目のセルを右クリックすると、セルの色は第4−2図のように薄緑色に変わります。
薄緑色は、使用者がそのセルを「黄」の既決状態と仮定したことを意味しています。
背理法試行2
            第4−2図 背理法試行2

ここで[試行]ボタンをクリックすると、ある程度のセルの色が黒色か黄色に変わった後、
  『timespan 1秒での試行を終了しました。(改行) ここで試行を停止しますか?』
のメッセージが表示されて画面は停止します。
ここで[OK]ボタンをクリックすると、第4−3図の画面となります。
背理法試行2の結果
          第4−3図 背理法試行2の結果

第4−3図で、全てのセルが既決となった行・列の設定数列と実際のセルの決定状態を比較してみると、 以下の行で両者の間に不一致が認められました。
  第2行 設定値 [1,4,2,3]  画面表示の値 [1,1,1,2,2,3]
  第3行 設定値 [6,3,3]    画面表示の値 [1,4,1,3,3]
  第8行 設定値 [6,3,1,1]  画面表示の値 [3,2,3,1,1]
このことから第4−2図とした行為、すなわち使用者が1行16列目のセルの状態を「黄」と仮定した行為は誤りであり、 このセルは「黒」の状態にしなければならないことがわかります。
なお、ここでは話を簡単にするために、全てのセルが既決となった行・列を議論の対象としましたが、 未決のセルが残っている行・列においても、明らかに設定値と異なる結果が生じている場合には同様に処理することができます。

ここまでとりあげてきた例題は最終的に以下の完成図となって終了します。
完成図
              第5図 完成図

補足−背理法における正しい状態
背理法では正しい状態から操作を開始することが必要条件となります。
正しさが不明の状態とか、間違った状態から開始した背理法の操作は、全く意味がないものとなりますので、ご注意ください。
本ソフトでは、以下の3つが正しい状態に該当します。
 1) 初期状態。(第2図の状態)
 2) 正しい状態から[試行]ボタンのクリックによって発生した状態。(例えば第3−1図の状態)
 3) 背理法で「偽」とされた状態の反対の状態。

 ソースコードのダウンロード

ソースコードのダウンロード
Visual C# 2008(.NET Framework 2.0)で作成したプログラムのソースコードを公開します。

 ご質問・ご意見・ご感想

ご質問、ご意見、ご感想、バグ等のご連絡は、 こちらへ

トップページへ