====================================================================== 【ソ フ ト名】 汎ポリイアモンド万能解答 Ver2.1 【登 録 名】 iamond21.LZH 【著作権 者】 谷口 幸夫         MXA01205@nifty.ne.jp http://www1.usen.ne.jp/~yuki-ta 【対応 環境】 Window95 【動作 確認】 NEC PC9821BP SONY PCG-505EX 【リリース日】 1999/07/11 【作成 方法】 LHA にて解凍を行う。 A> LHA E iamond21(リターン) 【ソフト種別】 フリーウエア ====================================================================== ダウンロードファイル名を『iamond21.lzh』としてください。 ====================================================================== 【改版の内容】 前版(Ver2.0)から以下の箇所を修正しました。   (1) 以下のファイルの修正。 hexia.pie  --- 読み込めなかった。 hexia.box --- 読み込めなかった。 eternity.inp --- ピースの形が間違っていた。 eternity.pie --- ピースの形が間違っていた。  (2) "30 deg Check" 及び "Bottle Neck Check" のバグの修正。 正確なチェックができなかった。 【ソフト紹介】 複数の正三角形をつないで作った図形のことを数学者オブライエンは”ポリ イアモンド”と名づけました。そしてこれらのポリイアモンドのピースを用い た多くの箱詰めパズルが考案されています。 本プログラムはポリイアモンドを用いたあらゆる箱詰めパズルの解を探索し ます。以下の機能・特徴を有します。 (1) 使用するピースの形・数を任意に設定できます。   ・ピースの数は209を超えない限り任意   ・ピースの形は縦12列・横12列を越えない限り任意。    各ピースを構成する正三角形の数はピースごとに異なってもよい。   ・ピースの構成単位は正三角形、及び正三角形をミラー対象になるよう    に2等分した直角三角形(これを"drafter"と呼びます)が指定できる。 (2) 箱の形を任意に設定できます。   ・横54列・縦30列を越えない限り任意 (3) 探索結果をファイルに記録できます。 (4) 探索に長時間かかる場合でも、複数回に分けて計算できます。 【ファイル内容】 iamond21.lzh には、以下の9つのファイルが圧縮されています。 readme .txt - - - 説明書 inp2pie .exe - - - ピース前処理プログラム (MS-DOS) iamond .exe - - - 解答プログラム (Windows95) hexia .inp - - - 「ヘキシアモンド」ピース入力ファイル hexia .pie - - - 「ヘキシアモンド」ピースファイル hexia .box - - - 「ヘキシアモンド」ボックスファイル eternity.inp - - - 「the eternity puzzle」ピース入力ファイル eternity.pie - - - 「the eternity puzzle」ピースファイル eternity.box - - - 「the eternity puzzle」ボックスファイル 【 概 要 】  本プログラムの概要を示します。 ( *.box ) ボックスファイル : : : ( *.inp ) ピース入力ファイル : : : inp2pie.exe ピース前処理プログラム (MS-DOS) : : : ( *.pie )  ピースファイル : : iamond.exe  解答プログラム (Windows 95) | ( *.ans )  解答ファイル (1) 任意のエディタで箱の形を定義したボックスファイルを作成する。 (2) 任意のエディタでピースの形を定義したピース入力ファイルを作成する。 (3) inp2pieにより、ピース入力ファイル(*.inp)をピースファイル(*.pie)    に変換する。 (4) 探索プログラムiamond.exeにより、ボックスファイル(*.box)とピース    ファイル(*.pie)を読み込み、解を探索し、結果を解答ファイル(*.ans)    に出力する。 【 ファイル仕様 】  このプログラムで使用するファイルの仕様を説明します。 1 ボックスファイル(*.box)  ”箱”の形を指定します。  以下にヘキシアモンドの場合のボックスファイルの例を示します。 88888888888888888888888888888888888888888888888888888888 88888888888088888888888888888888888888888888888888888888 88888888880008888888888888888888888888888888888888888888 88888888800000888888888888888888888888888888888888888888 88888888000000088888888888888888888888888888888888888888 88888880000000008888888888888888888888888888888888888888 88888800000000000888888888888888888888888888888888888888 88888800000000000888888888888888888888888888888888888888 88888880000000008888888888888888888888888888888888888888 88888888000000088888888888888888888888888888888888888888 88888888800000888888888888888888888888888888888888888888 88888888880008888888888888888888888888888888888888888888 88888888888088888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888 88888888888888888888888888888888888888888888888888888888  横56列・縦32列の半角文字から成ります。各文字は箱を構成する単位正 三角形に対応します。  左上を原点(0,0)に取り、右にX軸、下にY軸を取ります。このとき、Xと Yの値を足した数が偶数の場合は単位正三角形は上に凸、奇数の場合は下に凸 となります。  各文字は半角で、必ず0〜8の数字となります。 各数字は箱の壁の部分の形を表し、数字とこの形には以下の対応があります。 ・ 空白 ここにピースが置ける * 壁 ここにはピースは置けない ----------------------------------------------------------------  数字 0 1 2 3 空白 左 左上 右上 ---------------------------------------------------------------- 上に凸の場合 ・ * * * ・・・ **・ *** *** ・・・・・ ***・・ **・・・ ・・・** ・・・・・・・ ****・・・ *・・・・・・ ・・・・・・* ---------------------------------------------------------------- 下に凸の場合 ・・・・・・・ ****・・・ ******* ******* ・・・・・ ***・・ ***・・ ・・*** ・・・ **・ ・・・ ・・・ ・ * ・ ・ ---------------------------------------------------------------- ----------------------------------------------------------------  数字 4 5 6 7 未使用 左下 右下 右 ---------------------------------------------------------------- 上に凸の場合   ・ ・ *   ・・・ ・・・ ・** ***・・ ・・*** ・・*** ******* ******* ・・・**** ---------------------------------------------------------------- 下に凸の場合 *・・・・・・ ・・・・・・* ・・・**** **・・・ ・・・** ・・*** *** *** ・** * * * ----------------------------------------------------------------  上に凸、下に凸に関わらず、箱の壁がある側が同じならば同じ番号を付けま す。”4”は用いられていないことに注意して下さい。 箱の最外周は4辺とも”8”で埋めて下さい。 2 ピース入力ファイル(*.inp)  ピースの形を指定します。  以下にヘキシアモンドの場合のピース入力ファイルの例を示します。 iNumPie= 12 ピースの総数                  ***0************************    区切り(以下第0番のピースの記述) ***sym.mirror 1 ミラー対称性        ***sym.180deg 0 180°回転対称性 ***sym.120deg 0 120°回転対称性 0 0 8 0 0 0 0 0 0 0 0 0 0 ピースの形 0 8 8 8 0 0 0 0 0 0 0 0 0 0 8 0 8 0 0 0 0 0 0 0 0 0 A 0 0 0 0 0 0 0 0 0 0 0 0 0 AAA 0 0 0 0 0 0 0 0 0 0 0 0 0 BCCCD 0 0 0 0 0 0 0 0 0 0 0 0 0 BBBCDDD 0 0 0 0 0 0 0 0 0 0 0 0 0 EEE FFF 0 0 0 0 0 0 0 0 0 0 0 0 0 E F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ***1************************    区切り(以下第1番のピースの記述) ***sym.mirror 0 ***sym.180deg 0 ***sym.120deg 0 8 0 8 0 0 0 0 0 0 0 0 0 0 8 8 8 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (以下省略) ・ミラー対称性   そのピースが裏返しても同じ形である場合は1を、異な る場合は0を指定します。 ・180°回転対称性  そのピースが180°回転しても同じ形である場合は1を、 異なる場合は0を指定します。 ・120°回転対称性  そのピースが120°回転しても同じ形である場合は1を、 異なる場合は0を指定します。 ・ピースの形       13×13の配列でピースの形を指定します。各文字は単位正三角形に対 応します。   左上を原点(0,0)に取り、右にX軸、下にY軸を取ります。このとき、X  とYの値を足した数が偶数の位置は単位正三角形が上に凸、奇数の位置は下  に凸となります。   各文字は半角で、必ず0〜8の数字にして下さい。  各数字はピースの実体部分を表し、数字とこの形の対応は、ボックスファイ ルで示した表と同じです。 3 解答ファイル  計算により求められた解答が記録されます。  以下にヘキシアモンドの場合の解答ファイルの例を示します。 ***0*** 区切り(以下第0番の解の記述) 0 (11 1) 0 第0ピース 1 ( 9 3) 0 第1ピース 2 (15 5) 6 第2ピース 3 (16 6) 0 : 4 ( 8 4) 0 5 (11 7) 10 6 (13 3) 0 7 ( 6 6) 11 8 (11 9) 0 9 ( 8 7) 4 10 (11 5) 3 : 11 ( 9 10) 0 第11ピース ***1*** 区切り(以下第1番の解の記述) 0 (11 1) 0 1 ( 9 3) 0 2 (15 5) 6 3 (16 6) 0 4 ( 8 4) 0 5 (11 7) 10 (以下省略) 各行は一つのピースを表します。 0 (11 1) 0 / / / / ピース番号 / / / X座標 / / Y座標 / 配置 ・ ピース番号 ピース入力ファイル(*.inp)で指定したピース番号と対応しま す。 ・ X・Y座標 ピースを構成する単位正三角形の中で、一番上のもの、それ が複数ある場合は、一番左のものの、箱の中でのX座標を示 します。座標の定義はボックスファイルの座標の定義と同一 です。 ・ 配置 ピースを置くときの裏表と向きを示します。この値と実際の 配置の対応を以下の表に示します。 --------------------------------------------------------------- 値 実際の配置(ピースの裏表と向き) --------------------------------------------------------------- 0 基本配置。これはピース入力ファイルで指定した配置です。 1 基本配置を時計周りに60°回転した配置。 2 基本配置を時計周りに120°回転した配置。 3 基本配置を時計周りに180°回転した配置。 4 基本配置を時計周りに240°回転した配置。 5 基本配置を時計周りに300°回転した配置。 6 基本反転配置。基本配置を縦軸に対しミラー反転した配置。 7 基本反転配置を時計周りに60°回転した配置。 8 基本反転配置を時計周りに120°回転した配置。 9 基本反転配置を時計周りに180°回転した配置。 10 基本反転配置から時計周りに240°回転した配置。 11 基本反転配置から時計周りに300°回転した配置。 --------------------------------------------------------------- 【 準備 】  ・ダウンロードした"iamond20.lzh"を解凍して下さい。 【 使い方 】 1 上記ファイル仕様に従い、ボックスファイル(*.box)を作成します。 2 上記ファイル仕様に従い、ピース入力ファイル(*.inp)を作成します。 3 ピース前処理プログラム(inp2pie.exe)を用いてピース入力ファイル (*.inp) をピースファイル(*.pie)に変換します。 (1) MS-DOSモードで立ち上げるか、DOS窓を開いて、inp2pie.exeのある ディレクトリに移って下さい。 (2) ピース前処理プログラムを立ち上げます。 >inp2pie (Enter) 注 (Enter)はEnterキイの入力を表す。以下同じ。 (3) (作成済みの)ピース入力ファイル名を入力する。 *** INPUT File Name (*.inp) = hexia.inp(Enter) (4) (これから作成すべき)ピースファイル名を入力する。 *** PIECE File Name (*.pie) = hexia.pie(Enter) ピースファイル名を入力すると同時に、ピースファイルの作成を開始します。 4 ピースファイル(*.pie)とボックスファイル(*.box)を基に解を探索します。 (1) 解答プログラムを立ち上げます。 例えばエクスプローラから本プログラムをダブルクリックします。 --> メインダイアログボックスが開きます。 (2) ボックスファイルの入力   ・"Read (*.box)" ボタンを押します。    --> ダイアログボックスが現れます。   ・その中でボックスファイル(*.box)を選択します。 --> ウインドウが開いてボックスの形が表示されます。 ・確認がすんだら "Exit" ボタンをクリックして、ウインドウを閉じます。 (3) ピースファイルの入力   ・"Read (*.pie)" ボタンを押します。    --> ダイアログボックスが現れます。 ・その中でピースファイル(*.pie)を選択します。   --> ウインドウが開いてピースの形が表示されます。 ・確認がすんだら "Exit" ボタンをクリックして、ウインドウを閉じます。 (4) 解の探索の準備   メインダイアログボックスの中で、以下の指定を行います。 ・"from the last time" ここをチェックすると、前に計算した箇所から計算を開始します。     "Read (*.sta)" ボタンをクリックして前回の計算で作成した(*.end) ファイルを読み込みます。始めて計算する場合は、チェックしないで     下さい。 ・"Island check"     ここをチェックすると、ピースの置けない閉じられた空間(アイランド) ができない様なチェックを実行します。アイランドの広さを drafter     の数で指定します。 ・"30 deg check"     ここをチェックすると、30度の角度を持つ空間ができない様なチェッ     クを実行します。   ・"Set (*.end)" ボタンを押して、これから行う計算の進行状況を保存す    るファイル名を指定します。 (5) 解の探索   ・"Search" ボタンを押します。    --> ダイアログボックスが開きます。 ・この中で、計算結果を保存する解答ファイル名を指定します。  --> 探索用ウインドウが開きます。   ・"Search" メニューをクリックします。    --> 探索を始めます。画面にピースの置かれた状態を表示します。   ・"Mon.On/Off" メニューをクリックします。    --> ピースの表示を止めます。計算は続けています。      クリックするごとに表示と非表示を切り替えます。         解を発見するごとにその番号を表示します。   ・"Stop" をクリックすると計算を止めます。 探索が完了したり、"Stop" をクリックすると、以下の表示を出して    計算を終了します。  END of SEARCH   このとき、それまでに求めた解答が先程指定した解答ファイルに書かれ    ます。また、計算の進行状況が (*.end)ファイルに記録されます。この    ファイルは次回の計算の (*.sta)ファイルとなります。   ・"Exit" メニューをクリックして、探索用ウインドウを閉じます。 (6) 解の表示   ・"Display Answer" ボタンを押します。    --> ダイアログボックスが開きます。 ・この中で、表示する解答ファイル(*.ans)名を指定します。 --> 解表示用ウインドウが開き、解が表示されます。   ・解の確認がすんだら、"Exit" メニューをクリックして解表示用ウインド    ウを閉じます。 (7) 終了   ・最後に、メインダイアログボックスの "End" ボタンをクリックしてプロ グラムを終了します。    【 計算結果 】 作者による計算結果を示します。以下の環境・条件で行いました。 ( 環境 ) ・ 機種 : SONY PCG-505EX ・ CPU: Pentium (233MHz) ・ OS : 日本語 Windows 95 ( 対象パズル ) ヘキシアモンド 内容は添付ファイル参照 hexia.* ( 計算結果 ) 計算時間 5分 解の総数 624 【 その他 】 (1) 早く探索する方法 探索を早めるには、以下の点に注意して箱の形を設定して下さい。 ・ 箱の形が細長い場合、画面上で縦長になるように設定する。 ・ 箱の輪郭の凹凸が激しい場合、一番凹凸の激しい辺を上辺に、2番 目に凹凸の激しい辺を左辺になるように設定する。 (2) ファイルサイズ 解答ファイルは以下のサイズを有します。 ファイルサイズ(バイト) ≒ 17×(ピース数)×(解の数) (3) 対称性について 箱の形が対称性を持つ場合に生じる冗長性は本プログラムでは 考慮していません。 従ってこの場合は本来1個である解を箱の対称性で 決まる数だけ、重ねて数えていることになります。 【 参考文献 】 ジェリー・スローカム ジャック・ボタマンズ著 芦ヶ原伸之訳 「パズル その全世界」、日本テレビ、1988 以 上