==================================================================
【ソ フ ト名】  スライドパズル万能解答  Ver 5.0e
【登  録  名】 slide50e   .lzh
【著作権  者】 谷口  幸夫 
【対応  環境】 Windows 95、トルーカラー推奨
【動作  確認】 NEC PC9821BP, SONY PCG-505EX
【掲  載  日】  1998/12/27
【作成  方法】 LHA にて解凍を行う。  A> LHA E slide50e(リターン)
【ソフトウェア種別】 フリーソフトウェア
【転載  条件】  事後でも構わないので私宛にメールをください。
==================================================================
                                                     
ダウンロードファイル名を『slide50e.lzh』としてください。
                                                        
==================================================================

【改版の内容】

  前版( Ver4.2e )から以下の点を改善しました。

1 移動方向の指定(Move Constraints) --- (makesli.exe + slide.exe)
     それぞれの駒の動きを、上下方向のみ、もしくは左右方向のみに限
     定できるようにしました。
     今の所「連結移動(Combination Move)」との同時指定はできません。
2 使用メモリ量の低減  --- (slide.exe)
     Ver4.2eでは大サイズの箱や駒も扱える様にするために使用メモリが
     増えていましたが、データ圧縮により大サイズと低メモリ使用を両立
     させました。(前と同じ使用メモリ量に戻りました。)  
3 バグの修正 --- (slide.exe)
     最大手数の探索(Diameter)の結果表示(Answer/List)が、ある条件で
     乱れていたのを直しました。

【ソフト紹介】

  箱の中に複数の駒が入っていて、それらの駒をすべらせることにより指
定されたパターンに変えるパズル、これを一般にスライドパズルもしくは
スライディングブロックパズルと言います。一番有名なものは、「箱入り
娘」でしょう。

    ABBC      ????
    ABBC      ????
    DEEF −> ????   
    DGHF      ?BB?
    I**J      ?BB?

  上図はこのパズルを模式的に表すものです。同じ記号の所はつながって
一つの”駒”を成しています。”*”は駒のない空間です。左の初期パタ
ーンから始め、駒の移動を繰り返し、右の最終パターンにすることがパズ
ルの目的です。

  「箱入り娘」以外にも多くのスライドパズルが考案されています。本プ
ログラムは、任意のスライドパズルの設計と最短経路の探索が可能です。


【ファイル内容】

  slide50e.lzh には、以下の10のファイルが圧縮されています。

    readme  .txt ------ 説明書
    makesli .exe ------ スライドパズル・設計プログラム
    slide   .exe ------ スライドパズル・探索プログラム
    HAKOIRI .sli ------ バズル1・「箱入り娘」
    INFANT  .sli ------ パズル2・「小児病院」
    BLOCKADO.sli ------ パズル3・「ブロッケードソリテアチェッカー」
    GERMAIN .sli ------ パズル4・「ジャーメインパズル」 
    SILVER  .sli ------ パズル5・「シルバーラベルパズル」
  COMBI   .sli ------ パズル6・「連結移動のサンプル1」
    COMBJUNK.sli ------ パズル7・「連結移動のサンプル2」 

  パズル7は新設です。

【 概要 】

  本システムは「設計」と「探索」の2つのプログラムから成ります。

    設計プログラム    定義ファイル   探索プログラム    解答ファイル
   ( makesli.exe ) <-> ( *.sli ) --> ( slide.exe ) <-> ( *.ans )
       |                                 |        
    Makeファイル                     最遠点ファイル
  ( *.txt )                       ( *.edg )
                                                       
  1 設計プログラム( makesli.exe )により定義ファイル( *.sli )を作成しま
     す。定義ファイルには、スライドパズルの箱の形、駒の形、初期パターン、
     最終パターン、連結移動など、スライドパズルを決定する情報が記録され
   ます。

  2 次に探索プログラム( slide.exe ) により、定義ファイルを読み込み、最
     短の手順を探します。求めた解答を表示することができます。また、解答
     は解答ファイル( *.ans )として記録できます。

  初めての場合、設計プログラムを操作する前に、添付の定義ファイルを用いて
探索プログラムの動作を理解することを薦めます。


【 設計プログラム( makesli.exe )の使い方 】

  1 (例えばエクスプローラーから)本プログラム makesli.exe を起動します。
     -> 「Sliding Block Puzzle Solver - Design」ダイアログボックスが開き
        ます。

(駒の切り抜き:Make Up)

  スライドパズルの箱の形、駒の形、初期パターン、最終パターンを設定します。  

  2  「Make Up」ボタンを押します。
     -> 「Make Up」ウインドウが開きます。
        左側の格子を「初期パターン」画面、右側を「最終パターン」画面、上
        にある多色のボタン列を「パレット」と呼びます。

  3 まず、「初期パターン」画面を設定します。

  (1) カーソルを「パレット」中の特定の色に運びクリックします。上に矢印
      が描かれることにより、その色が選択されたことが分ります。
  (2) その後、カーソルを「初期パターン」画面に運び、クリックとドラッグ
      で最初の駒を描きます。同色のマス目の集合が一つの駒として認識され
      ます。同色のマス目が繋がっていない場合、後でエラーとなるので注意
      して下さい。
  (3) 次に再びカーソルをパレットに運び、異なる色(任意)を選択し、同様
      にして第2、第3の駒を描いてゆきます。
  (4) 最後にカーソルをパレットの黒の部分(”S”と書かれている)に運び
      黒を選択します。これはパズルの”空き”の部分に相当します。駒と同
      様の方法で空きの部分を描きます。

  4  同様の操作で「最終パターン」画面を設定します。
      「最終パターン」においては、”?”印を描くことにより、その部分は
       ”任意”であることを指定できます。

      上記設計において、最終的に出来るパターンは以下の条件を満たす必要
      があります。
      ・ 2画面の箱の形が等しいこと。
      ・ ”任意”の記号”?”が「初期パターン」にないこと。
      ・ 2画面の対応する(同じ色の)駒はすべて同形であること。
      ・ 一つの駒を構成するマス目はすべて繋がっていること。
      ・ 駒を構成するマス目の数の合計が127を越えないこと。
      ・ (当然ですが)駒の数がパレットの色数24を越えないこと。

  5 「初期パターン」「最終パターン」の両方の設定が終わったら、メニュー
     「Set」をクリックします。
     -> 上記条件が満たされていなければ、警告のメッセージボックスが表示
        されます。満たされていれば「Make Up」ウインドウが閉じます。

(交換性の指定:Compatibility)

  2つ(もしくはそれ以上)の同形の駒の交換を認める場合、「交換性がある」
と定義します。
  ・ 「最終パターン」上で特定の駒のみが指定されてあとは任意である場合、
     その特定駒以外の同形の駒同志は交換可能です。
  ・ 「最終パターン」上で指定されている同形の駒が、両者を入れ替えても解
     として認められる場合、それらは交換可能です。
  ・ それぞれの駒が記号等で識別されていて、その記号等のパターンが「最終
     パターン」で指定されている同形の駒同志は交換”不可能”です。

  ここでは駒の交換可能/不可能を指定します。交換可能な駒が多い程、探索
のスピードは速くなります。

  6  「Sliding Block Puzzle Solver - Design」ダイアログボックス中の
     「Compatibility」ボタンを押します。
     -> 「Compatibility」ウインドウが開きます。「Make Up」で設定した駒
        が改めて表示されます。
   
  7 カーソルをパレット上でクリックした後、「初期パターン」もしくは「最
     終パターン」上で駒をクリックすることにより、駒の色を変えます。「交
     換可能」としたい駒同志を同色にします。
     また、ここで指定する色が探索プログラム( slide.exe )での表示色とな
     ります。自分の好みの色をつけて下さい。 

  8 メニュー「Set」をクリックします。
     ->  「Compatibility」ウインドウが閉じます。
         このときの色付け状態で、上記の「交換性」が判断されます。

( 連結移動 : Combination Move )

 2つ以上の駒を同時に動かせるルールの場合、この動きを「連結移動」
と呼びます。この場合、連結移動が何個の駒から成っても一回の動きを
一手と数えます。ここでは、連結移動を認める駒の組み合わせを指定しま
す。
  連結移動を行わない場合は、ここの操作を省略して、(移動方向の指定)
か(定義ファイルの作成)に移って下さい。

  9  「Sliding Block Puzzle Solver - Design」ダイアログボックス中の
     「(Combination Move)」ボタンを押します。
     -> 「Combination Move」ウインドウが開きます。左右2面の格子が
    現れます。左の格子には全ての駒が表示されます。右の格子は連
    結移動を認める駒の配置を表します。最初は空白です。
  
  10 左の格子上でクリックすることにより駒を拾い上げ、右の格子で
       再びクリックすることにより、その駒を置くことができます。
      これを繰り返すことにより、希望する配置を組み立てて行きます。
      例えば、サンプルの "COMBI.sli" の場合は、

      まず、Aの駒を置いて・・・
       AA
       A 
       AA

      次にBの駒をAの隣に置きます。
       AAB
       ABB
       AAB
  
       この配置は、この状態で移動できることを意味しています。

  11 希望の配置が完了したら、メニュー「Add」をクリックして記録し
    ます。画面上にある "Combination" の表示が0から1になり、正
    常に記録されたことを示します。

 12 連結移動する配置が複数の場合は、その数だけ10と11の操作
    を繰り返します。

 13 記録した配置を確認したい場合は、メニュー「Display」をクリッ
    クして下さい。一覧表示用ウインドウが開き、スクロールバーに
    より今記録されている配置を一覧できます。

 14 全ての連結移動を記録したら、メニュー「Set」を押して、   
	「Combination Move」ウインドウを閉じます。


( 移動方向の指定 : Move Constraints )

  通常は駒は上下左右のどちらにも移動できますが、パズルによっては上
下方向もしくは左右方向に制限されているものがあります。これを「移動
方向」と呼びます。ここでは、移動方向を指定します。
  移動方向の指定を行わない場合は、ここの操作を省略して(定義ファイ
ルの作成)に移って下さい。

  15  「Sliding Block Puzzle Solver - Design」ダイアログボックス
       中の「(Move Constraints)」ボタンを押します。
       -> 「Move Constraints」ウインドウが開き、初期配置が表示され
          ます。
  
  16 クリックにより駒の移動方向を指定します。画面上側に示される移
    動方向と表示形態の対応表を参考にして下さい。
       クリックするごとに、Normal Move -> Vertical Move ->
       -> Horizontal Move -> No Move -> Normal Move を繰り返します。        

 17 移動方向を指定する全ての駒についてこの操作を行います。

 18 最後にメニュー「Set」を押して、「Move Constraints」ウインド
        ウを閉じます。

(定義ファイルの作成)

  19 「Sliding Block Puzzle Solver - Design」ダイアログボックス中
       の「MakeDefinition file」ボタンを押します。
     -> 「Make Definition file」ダイアログボックスが開きます。
        ディレクトリやファイル名を指定して定義ファイルとして記録し
        ます。拡張子には *.sli を推薦します。

  20  最後に「Sliding Block Puzzle Solver - Design」ダイアログボッ
        クス中の「EXIT」ボタンを押して本プログラムを終了します。

(特殊な使い方)

  A (駒の切り抜き:Make Up)において、既存の定義ファイルを参照す
     ることができます。
     (1) 「Make Up」ウインドウが開いている状態で、メニュー「File」
         /「Read Definition File」をクリックします。
         -> ダイアログボックスが開きます。
     (2) ディレクトリやファイル名を指定して定義ファイルを読み込み
         ます。画面は定義ファイルの内容に変わります。

  B (駒の切り抜き:Make Up)のとき、設計途中の画面をそのまま記録
     しておくことができます。
     (1) 「Make Up」ウインドウが開いている状態で、メニュー「File」
         /「Write Make File」をクリックします。
         -> ダイアログボックスが開きます。
     (2) ディレクトリやファイル名を指定して「Makeファイル」として
         記録します。

  C 記録された「Makeファイル」を読み込むことにより、設計途中の画
     面を再現できます。
     (1) 「Make Up」ウインドウが開いている状態で、メニュー「File」
         /「Read Make File」をクリックします。
         -> ダイアログボックスが開きます。
     (2) ディレクトリやファイル名を指定して「Makeファイル」を読み
         込みます。
         -> 記録したときの画面が再現されます。

  
【 探索プログラム( slide.exe )の使い方 】

  1 (例えばエクスプローラーから)本プログラム slide.exe を起動し
      ます。
     -> 「Sliding Block Puzzle Solver - Search」ウインドウが開きます。

  2 メニュー「File」/「Read Definition file」をクリックします。
     -> 「Definition file - Read」ダイアログボックスが開きます。

  3 読込む定義ファイルを選択します。
     -> 読み込みが完了すると、ウインドウ中に3つの小画面が表示され
        ます。左は初期パターン、真ん中は探索用画面、右は最終パター
        ンです。この段階では、探索用画面は全面黒の状態です。

  4 (必要ならば)各種条件を設定します。メニュー「Setting」/
     「Condition」をクリックします。
     -> 新たにダイアログボックスが開きます。その中で以下の設定を行
        います。

  (1)「Frame Width」:パターン周囲の縁の幅
  (2)「Don't Display Start Set」:これをチェックすると初期パターン
      を省略し、探索用画面と最終パターン画面のみを表示します。「箱」
      が大きく画面からはみ出る場合に選んで下さい。
  (3) 「Counting Way of Steps」:「1Step any latttice」を選ぶと、
      一つの駒を続けて動かす限り、それが何マスであっても一手と数え
      ます。
  (4) 「 Use Combination Move」:このチェックをはずすと定義ファイル
      に連結移動が記録されていても無視しします。
  (5) 「Time Interval」:後述8の解の動的表示の時の一手あたりの表示
      時間。

    これらを設定した後、最後に「OK」を押します。
 
  5 (必要ならば)メモリ関連の条件を設定します。メニュー「Setting」/
     「Memory」をクリックします。
     -> 新たにダイアログボックスが開きます。その中で以下の設定を行い
        ます。

  (1) 「Don't Record History」:これをチェックすると探索の途中経過を記
      録しません。
      使用メモリが増えすぎて問題が発生した場合、これをチェックしてやり
      なおして見て下さい。解の手順は得られませんが、最終パターン(両方
      向探索の場合は経由パターン)と、手数だけが求まります。
  (2) 「Memory Type」:探索の途中経過を記録するメモリの媒体を設定します。

   1) 「HDD」を選択すると探索の途中経過はHDD上のファイルとして記
      録されます。このファイルは探索終了後自動的に削除されます。
      右隣の「File Name」ボタンによりこのファイル名を指定できます。この
      ファイル指定を行わないと、自動的にカレントディレクトリに 
      "history.tmp0" と "history.tmp1" という名のファイルが作られます。
      探索は遅くなりますが、大容量の記録が可能になります。

   2) 「RAM」を選択すると探索は速くなりますが、RAM容量に制限され
      ます。

  (3) 「Set HDD Limit」:探索の途中経過のデータは探索の進行とともにHDD
      を占有して行きます。HDDの容量に不安がある場合、ここをチェック
      し、HDDのメモリ容量(MB単位)を設定しておくと、そのメモリ量
      に達した時に探索は終了します。それまでに解が得られないと探索は失
      敗に終わります。
  (4) 「Set RAM Limit」:このプログラムは探索の途中経過のデータ以外にも
      多くのデータがRAMを占有して行きます。RAM容量に不安がある場
      合、ここをチェックし、RAMのメモリ容量(MB単位)を設定してお
      くと、そのメモリ量に達した時に探索は終了します。それまでに解が得
      られないと探索は失敗に終わります。
  (5) 「Memory Check」:このボタンを押すと、探索開始前に、使えるRAM
      の容量を事前確認出来ます。クリックしてから数分位後、RAM容量が
      メッセージボックスにより表示されます。
      この値が解きたい問題に対して少ない場合はRAMの増設が必要です。

    これらを設定した後、最後に「OK」を押します。

  6 メニュー「Search」/「Start」をクリックします。
     -> 探索が開始され、探索中のパターンが次々と表示されます。
        このままでは、表示に時間がとられ、なかなか目標に到達しません。     

  7 メニュー「Monitor On/Off」をクリックします。
     -> 探索中のパターンの表示は中止され、これにより探索はより速くなり
        ます。
        メニュー「Monitor On/Off」をクリックすることにより、表示と非表
        示は何回でも切り替えられます。
        やがて解が発見されると(たとえ非表示であっても)探索用画面全面に
        ”A”記号が描かれ、ステータスバーに「Find answer !」と表示さ
        れます。また、解が存在しなければ、探索用画面に”X”印が描かれ、
        ステータスバーに「No Answer !」と表示されます。

  8 メニュー「Answer」/「Sliding Start」をクリックします。
     -> 解の手順が動的に表示されます。

  9 メニュー「Answer」/「List」をクリックします。
     -> 「List」ウインドウが開きます。解の手順が一覧されます。
        ウインドウを好みの大きさに変えて下さい。スクロールボタンにより
        スクロールできます。    

 10 (最後に)メニュー「File」/EXIT」をクリックします。
     -> ウインドウは閉じ本プログラムは終了します。

(特殊な使い方)

    スライディングプロックパズルの設計においては、より難しい、すな
  わちより手数を要するパズルを作ることに興味があります。そのため、
  ある駒の組合せにおいて得られる最大手数が分かれば参考になります。
    以下の手順で、初期パターンから到達できる最大手数とそのパターン
  を求めることができます。
  
  (1) 通常の方法で定義ファイルを読み込みます。
  (2) メニュー「Diameter」/「Start」をクリックします。
      -> 最大手数の探索を開始します。
  (3) メニュー「Monitor On/Off」をクリックし、探索を速めます。
  (4) やがて最大手数が発見されると(たとえ非表示であっても)、探索用
      画面全面に”E”記号が描かれ、ステータスバーに「Find Farthest
      End !」と表示されます。このときSTEPに表示されているのが最大
      手数、STATEに表示されているのがパターン数です。
  (5) メニュー「Answer」/「List」をクリックします。
      -> 「List」ウインドウが開きます。解の手順が一覧されます。
  (6) (この結果を記録したい場合)メニュー「File」/「Read Edge File」
      をクリックします。
     -> 「Definition file - Read」ダイアログボックスが開きます。
      その中で記録する"最遠点ファイル"を選択します。


 【 探索結果 】

  作者による探索結果を示します。

(探索条件)
     ・ 探索開始直後に「Monitor On/Off」により非表示
     ・ 「Counting Way of Steps」は「1Step any lattice」

( 環境 )
     ・ 機種  : NEC  PC9821BP
     ・ CPU: i486DX2/66MHx
     ・ OS  : 日本語版 Windows  95

( 探索結果 )

     定義ファイル名     手数    解の発見に要した時間
      ---------------------------------------
      HAKOIRI .sli       81         32 s       
      INFANT  .sli       26     1 m  2 s    
      BLOCKADO.sli       74          6 s    
      GERMAIN .sli       63          6 s    
      SILVER  .sli       55     1 m  6 s      


【 注意 】

  定義ファイル(*.sli)および解答ファイル(*.ans)は全て上位互換性が
あります。本バージョンのMakesli.exe 及び Slide.exe は、今まで作成した
全てのファイルの使用が可能です。

                                  
【参考文献】

  スライドパズル及び本プログラムの作成改良に関し以下の文献を参考にさ
せて頂きました。

1  ジェリー・スローカム/ジャック・ボタマンズ著、芦ヶ原伸之訳、
  「悪魔のパズル」、日経サイエンス社、1995
2  池野信一他、「数理パズル」、中央公論社、1976
3  川合さとる、「箱入り娘」、数理科学、NO 115、JANUARY、1973
4  加藤美治、他、「箱入娘パズルをめぐって」
5  後藤英一、他、「箱入娘およびL6 −解法と記述言語−」、
    数理科学講演録 98、1970


【作者からのお知らせ】

  以下のWWWで、作者作成の他のプログラムを紹介しています。ぜひご覧く
  ださい。
    http://www1.usen.ne.jp/~yuki-ta/


                                                              以 上