"複数の要素配置場所が描かれ、その各々が他の要素配置場所との隣接有無が定義されている平面と、順序を有する要素の集合であるグループが複数個提示されて、各要素を要素配置場所に配置する際に、要素が置かれていない要素配置場所が無いように、同一グループに属する要素は同一であっても1つの要素配置場所に重ねて配置することはできないが、異なるグループに属する同一の要素は1つの要素配置場所に重ねて配置することができ、各グループの要素を隣接する要素配置場所に順序に従い連続して配置するというルールのパズルの問題を提供するために、要素配置場所や要素の初期条件と、配置が唯一解になるための制約条件を入力する機能と、入力された初期条件と制約条件をメモリに読み込み、メモリに割り当てた要素配置場所と各要素の配置組み合わせを保存する領域に、初期条件と制約条件とルールを満たすすべての配置組み合わせを実現し、その中から要素配置場所と各要素の配置組み合わせが唯一解になるかどうかを判定する制御演算機能と、その唯一解の要素配置場所と要素の配置組み合わせデータを出力する機能と、を備えた要素配置唯一解算出装置。第1段階として、提示された要素配置場所と要素の初期条件とルールを満たす要素配置場所と要素の配置組み合わせをレコードとして出力し、第2段階として、上記配置組み合わせレコードのうち、選択された重なり要素関係分類要素と別の要素が任意の要素配置場所で重なっている関係で、その和集合、積集合、空集合を含むのレコードを抽出し、さらに一部の要素を要素配置場所へあらかじめ配置することによる制約条件を満足する配置組み合わせレコードが唯一解になるかどうかを判定し、唯一解であれば要素と要素配置場所の組み合わせデータを出力する二段階方式要素配置唯一解算出プログラムを備えた請求項1の要素配置唯一解算出装置。ルール、要素配置場所と要素の初期条件および、一部の要素を要素配置場所へあらかじめ配置することによる制約条件を満たす配置組み合わせが唯一解になるかどうかを判定し、唯一解であれば要素と要素配置場所の組み合わせデータを出力する一段階方式要素配置唯一解算出プログラムを備えた請求項1の要素配置唯一解算出装置。要素配置場所間の隣接定義を画面から又はテキストファイルの読み込みによって設定することを可能にした要素配置唯一解算出プログラムを備えた請求項1の要素配置唯一解算出装置。一部の要素を要素配置場所へあらかじめ配置することによる制約条件が、唯一解を探す際に適用する各種制約条件の適応優先順位である要素配置唯一解算出プログラムを備えた請求項2の要素配置唯一解算出装置。配置が唯一解になるための制約条件の一部または全部が、要素と要素が隣接可能かどうかの定義である要素配置唯一解算出プログラムを備えた請求項1の要素配置唯一解算出装置。複数の要素配置場所が描かれ、その各々に対し他の要素配置場所との隣接有無が定義されている平面と、順序を有する要素の集合であるグループが複数個提示されて、各要素を要素配置場所に配置する際に、要素が置かれていない要素配置場所が無いように、同一グループに属する要素は同一であっても1つの要素配置場所に重ねて配置することはできないが、異なるグループに属する同一の要素は1つの要素配置場所に重ねて配置することができ、各グループの要素を隣接する要素配置場所に順序に従い連続して配置するというルールのパズルの問題を、一部の要素の要素配置場所への配置や要素と要素が隣接可能かどうかの定義による制約条件により、唯一解となることがあらかじめ確かめられている配置組み合わせの中から出題するパズルゲームの提供方法。複数の要素配置場所が縦横に隣接する縦4列横4行の16個のマス目で、順序を有する要素の集合であるグループが3つの句からなる俳句で、その要素がモーラ一定の時間的長さをもった音の分節単位であり、制約条件がその俳句の中のいくつかのモーラを要素配置場所へ初期配置することである請求項7のパズルゲームの提供方法。複数の要素配置場所が縦横に隣接する縦5列横6行または縦6列横5行の30個のマス目で、順序を有する要素の集合であるグループが5つの句からなる短歌で、その要素がモーラであり、制約条件がその短歌の中のいくつかのモーラを要素配置場所へ初期配置することである請求項7のパズルゲームの提供方法。複数の要素配置場所が現実の地理区域すなわち国、都道府県、又は駅港の隣接有無に基づいて作成された要素配置場所で、順序を有する要素の集合であるグループが都市や観光地を巡る旅程又は交通ダイヤで、その要素が国、都道府県、都市、観光地又は駅港であり、制約条件がいくつかの要素を要素配置場所へ初期配置するか、要素間の隣接可否か、又はその双方である請求項7のパズルゲームの提供方法。しかしながら、特許文献1の考案は、ヒントから語句を推測し、その長さや縦横の関係から適当な語句を探し出すことに興趣の中心があり、また、文字の置き方は縦横いずれかの一直線上であり、図形的な興趣性に欠ける。また、唯一解に基づく出題ではないので、語句ごとにヒントを用意し、配置位置も指定する必要がある。また、出題をコンピュータで自動的に行うためには、相当数の語句とヒントを予めデータベースとして用意しておく必要がある。特許文献2の考案は、縦横に区切られたマス目にグループの要素を配置する唯一の方法を見つけ出すパズルという点では当発明と同じだが、縦4列横4行のマス目をテトロミノという4つの連続する正方形を要素とする図形で4つに分割するパズルであり、マス目の縦横の数が4に固定され、マス目の上の要素の重なりを認めず、グループの数と各グループの要素数が任意に設定できないため、グループの要素をマス目に置く配置組み合わせ数が少なく、パズルとしての応用の広さと複雑性に欠ける。そこで、この発明は平面上に複数の要素配置場所があって、各要素配置場所がどの要素配置場所と隣接するかがあらかじめ定義以下隣接定義というされていて、提示された複数個のグループ語句や数字列、旅程、鉄道ダイヤ、製品供給物流連鎖等の順序を有する要素文字や数字、観光地、鉄道停車駅、製品供給物流企業等をその要素配置場所に配置する際に、1各グループ単位に隣接する要素配置場所に順序に従い連続して配置する。2要素が置かれていない要素配置場所が無いようにする。3同一グループに属する要素は同一であっても1つの要素配置場所に重ねて配置することはできない。4異なるグループに属する同一の要素は1つの要素配置場所に重ねて配置することができる。というルールに基づく要素配置場所と要素の配置組み合わせの中で、制約条件として一部の要素の要素配置場所をあらかじめ指定するか、又は、要素と要素が隣接可能かどうかの定義以下要素間隣接定義というを設定することで、唯一の配置法になるような解以下唯一解というを算出する装置を提供し、また、唯一解を基にパズルを提供することを課題とする。以下にマス目を使った実施例として、五七五の俳句を題材とした実施例1と、隣接定義がされている要素配置場所が配された平面を使った実施例として、都道府県の観光地の旅程を題材とした実施例2を説明する。なお、本発明の理解を助けるため具体的な表現を使用するが、本発明を限定するものではない。実施例1については、五七五の俳句の3つの句の、合わせて17個のモーラを縦4列横4行のマス目に、1つの句に属するモーラはその並び順に上下又は左右に連続して配置し、異なる句の同一モーラは重ねて配置することができ、モーラが置かれていないマス目がないように配置するとした場合のすべての配置組み合わせをプログラムにより算出し、その中から指定された制約条件のもとで唯一解を算出する実施例二段階方式を最初に説明し、その後に一段階方式を説明する。俳句の場合、句の順番上句=上五、中句=中七、下句=下五が意味を持つが、要素のマス目への配置パターンとしては、グループの要素数が降順になっているパターン分類番号が44755図4を参照。縦4列、横4行、第1グループ要素数7、第2グループ要素数5、第3グループ要素数5。組み合わせ数72,320の組み合わせと同一になるのでそれを使用する。この場合、句はグループ、モーラは要素に相当し、要素数の降順に中句が第1グループ、上句が第2グループ、下句が第3グループに対応する。組み合わせ出力部プログラムは図12のハードウェア構成における外部メモリ01に格納されていて、プログラム開始時にメモリ02にロードして起動させる。起動すると、ディズプレイ03に図15のような配置組み合わせ出力部画面が表示される。以下、図17以降のフローチャートに沿って、CPU05で実行されるプログラムの流れを説明する。ステップS1で、キーボード04から入力された配置組み合わせ出力部画面図15のマス目の列数20、行数21、グループ数22、各グループの要素数23をメモリ02図14の対応する変数領域列数は11、行数は12、グループ数は13、各グループの要素数は14にセットする。また、入力されたグループの要素数の合計値からマス目の数を減算した値をメモリ02の重なり要素数15にセットするとともに、配置組み合わせ出力部画面図15の重なり要素数25にセットする。この実施例では、第1グループ要素数が7、第2グループ要素数が5、第3グループ要素数が5で、マス目列数が4、行数が4になるので、重なり要素数は1となる。ステップS2で、ループ処理で使用するマス目のX座標列番号変数xとY座標行番号変数yを1に初期化し、ステップS7とステップS8で変数xと変数yに1を加算しながら、ステップS3とステップS4で変数xと変数yの上限チェックを行い、ステップS5とステップS6の処理を繰り返す。列数が4、行数が4の実施例では、ステップS5とステップS6の処理を16回変数xを1~4、変数yを1~4繰り返すことになる。ステップS5で、メモリ02図14のLV配列変数16第1重なり要素レベル値から第5重なり要素レベル値までをゼロクリアする。なお、この値は各マス目に配置された要素のグループ番号を100の位の1桁の数字で、要素番号を10の位と1の位の2桁の数字で表す。例えば第3グループの第2要素ならば302となる。LV配列変数の第1添字には重なり順位グループ数の最大値を5にしているので1~5、また、第2添字にはX座標、第3添字にはY座標をセットする。ステップS6で、サブルーチン要素配置処理を呼ぶ。その際、第1引数現グループ番号に1、第2引数現要素番号に1、第3引数現X座標に変数x、第4引数現Y座標に変数yをセットする。サブルーチン要素配置処理では、最初に、引数で渡される現在の要素をマス目に配置する処理ステップS12とステップS13を行った後に次の要素の処理へ進む。最後に、引数で渡された現在の要素のマス目とそれ下位のレベルの配置をクリアするステップS21。以下、図18のフローチャートに沿って説明する。まず、ステップS11で、引数をサブルーチン内部変数に取り込む。ステップS12で、各要素のマス目への配置位置を保存する変数17図14.X座標はWX、Y座標はWY、第1添字は現グループ番号、第2添字は現要素番号に現X座標と現Y座標をセットする。ステップS13で、サブルーチンマス目レベル値設定処理を呼ぶ。その際、第1引数グループ番号に現グループ番号、第2引数要素番号に現要素番号、第3引数X座標に現X座標、第4引数Y座標に現Y座標をセットする。ステップS14で、第2引数の現要素番号に1を加算して次要素番号を算出し次の要素の処理へ進む。次のステップS15で、この次要素番号がその属するグループの最大要素番号を超えたかどうかを判定し、超えない場合、すなわち次要素番号が存在する場合はステップS16、超える場合、すなわち次要素番号が存在しない場合はステップS17を処理する。ステップS16で、サブルーチン次要素処理を呼ぶ。その際、第1引数グループ番号に現グループ番号、第2引数要素番号にステップS14で算出した次要素番号、第3引数X座標に現X座標、第4引数Y座標に現Y座標をセットする。その処理後ステップS21へ行く。ステップS17で、第1引数の現グループ番号に1を加算した値を次グループ番号とする。次のステップS18で、この次グループ番号がメモリ02図14のグループ数13を超えたかどうかを判定し、超えない場合、すなわち次グループ番号が存在する場合はステップS19、超える場合、すなわち次グループ番号が存在しない場合はステップS20の出力処理を実行し、その処理後ステップS21へ行く。ステップS19で、サブルーチン次グループ処理図25を呼ぶ。その際、引数グループ番号に次グループ番号をセットする。ステップS20で、メモリ02図14に保存されているデータを配置組み合わせ各マス目の配置要素レコードとして外部メモリ01に出力する。出力項目は図6のとおり。PIDはレコード出力ごとに1からの連番を出力する。PTYPEパターン分類は図3から図5に示されているように、マス目の列数と行数、各グループの要素数を連結した文字列を出力する。A1からD4までの各マス目に置く要素を示す記号16項目は、以下の1から4のように、メモリ02図14の各要素のマス目への配置位置17のWXとWYの内容を順次調べて、該当するマス目の位置のグループ記号第1グループはP、第2グループはQ、第3グループはR、第4グループはS、第5グループはTと要素番号1~15を連結した文字列を出力する。なおこの実施例ではA1からD4の16項目だが、例えば、マス目が3列2行の場合はA1、A2、B1、B2、C1、C2の6項目になる。1列数変数xを1からマス目の列数まで、行数変数yを1からマス目の行数まで順に設定したうえで以下の比較処理を行う。2第1グループの第1要素のWX1,1とWY1,1がxとyに一致すれば、P1を出力し、当比較処理を出る。これは、重なりがある場合は最初の重なり順序の要素を出力することを意味する。3次に、第1グループの第2要素のWX1,2とWY1,2がxとyに一致すれば、P2を出力し、当比較処理を出る。この処理を第1グループの要素数だけ繰り返す。4第2グループ以降についても、2、3と同様の処理を行う。DUPPOS1、DUPU1、DUPD1からDUPPOS6、DUPU6、DUPD6までの6組の重なりデータは、以下の1から9のようにメモリ02図14のマス目重なり要素レベル値16を順次読んで出力する。1列数変数xを1からマス目の列数まで、行数変数yを1からマス目の行数まで順に設定したうえで以下の処理を行う。なおNは初期値を1とし、出力するごとに1を加算する。2LV5,x,yが0以外ならば、LV1,x,yとLV2,x,yから1組、LV1,x,yとLV3,x,yから1組、LV1,x,yとLV4,x,yから1組、LV1,x,yとLV5,x,yから1組の合計4組の重なりデータを作成する。これは1つのマス目に5つの要素が重なっている例である。3LV4,x,yが0以外ならば、LV1,x,yとLV2,x,yから1組、LV1,x,yとLV3,x,yから1組、LV1,x,yとLV4,x,yから1組の合計3組の重なりデータを作成する。これは1つのマス目に4つの要素が重なっている例である。4LV3,x,yが0以外ならば、LV1,x,yとLV2,x,yから1組、LV1,x,yとLV3,x,yから1組の合計2組の重なりデータを作成する。これは1つのマス目に3つの要素が重なっている例である。5LV2,x,yが0以外ならば、LV1,x,yとLV2,x,yから1組の重なりデータを作成する。これは1つのマス目に2つの要素が重なっている例である。61組の重なりデータは、重なり順序の小さいLVL,x,yと重なり順序の大きいLVH,x,yから以下のように作成する。7まず、x座標とy座標より、xの1~4を列を表す文字ABCDに置き換え、yと連結した2文字をDUPPOSNにセットする。8次に、LVL,x,yの100の位の1~5をグループ番号を表す文字PQRSTに置き換え、10の位と1の位の要素番号を表す文字と連結した3文字をDUPUNにセットする。9次に、LVH,x,yの100の位の1~5をグループ番号を表す文字PQRSTに置き換え、10の位と1の位の要素番号を表す文字と連結した3文字をDUPDNにセットする。ステップS20では同時に、メモリ02に保存されているデータを配置組み合わせ各要素のマス目位置レコードとしても外部メモリ01に出力する。出力項目は図7のとおり。PIDはレコード出力ごとに1からの連番を出力する。これは、上記の各マス目の配置要素レコードのPIDと一致する。PTYPEパターン分類は上記の各マス目の配置要素レコードのPTYPEと一致する。第1グループの各要素のマス目の位置P1~P7の7項目は、メモリ02図14の各要素のマス目への配置位置17のWX1,1からWX1,7とWY1,1からWY1,7の内容をマス目位置記号A1~D4に変換して順次出力する。第2グループの各要素のマス目の位置Q1~Q7の5項目は、メモリ02図14の各要素のマス目への配置位置17のWX2,1からWX2,5とWY2,1からWY2,5の内容をマス目位置記号A1~D4に変換して順次出力する。第3グループの各要素のマス目の位置R1~R7の5項目は、メモリ02図14の各要素のマス目への配置位置17のWX3,1からWX3,5とWY3,1からWY3,5の内容をマス目位置記号A1~D4に変換して順次出力する。DUPPOS1、DUPU1、DUPD1はメモリ02図14の重なり要素レベル値16を順次読んで出力する。これは、上記の各マス目の配置要素レコードのDUPPOS1、DUPU1、DUPD1と一致する。ステップS21で、現グループ番号に100を掛けた値に現要素番号を加えた値を引数レベル値にセットし、サブルーチンマス目レベル値クリア処理を呼ぶ。この処理までに引数で渡される現在の要素に対する処理は完了しているので、この処理により現在の要素のマス目とその下位レベルの要素への配置をすべてクリアする。当サブルーチン処理を終了し、元の処理に戻る。サブルーチンマス目レベル値設定処理では、各マス目にどの要素が配置されたかを記憶する。グループ数が5の場合、1つのマス目に最大5つまで重ねて配置されるので、メモリ02図14のLV配列変数では、第1添字で重なり順位を指定する。以下、図19のフローチャートに沿って説明する。まず、ステップS31で、引数をサブルーチン内部変数に取り込む。ステップS32で、マス目に1つ目の要素がすでに配置されているかをチェックし、配置されていない場合、すなわち、LV1、現X座標、現Y座標が0の場合は、ステップS33で、現グループ番号に100を掛けた値に現要素番号を加えた値をLV1、現X座標、現Y座標にセットし、当サブルーチン処理を終了し、元の処理に戻る。すでにマス目の1つ目の要素が配置されている場合は、ステップS34で、マス目に2つ目の要素がすでに配置されているかをチェックし、配置されていない場合、すなわち、LV2、現X座標、現Y座標が0の場合は、ステップS35で、現グループ番号に100を掛けた値に現要素番号を加えた値をLV2、現X座標、現Y座標にセットし、当サブルーチン処理を終了し、元の処理に戻る。すでにマス目の2つ目の要素も配置されている場合は、ステップS36で、マス目に3つ目の要素がすでに配置されているかをチェックし、配置されていない場合、すなわち、LV3、現X座標、現Y座標が0の場合は、ステップS37で、現グループ番号に100を掛けた値に現要素番号を加えた値をLV3、現X座標、現Y座標にセットし、当サブルーチン処理を終了し、元の処理に戻る。すでにマス目の3つ目の要素も配置されている場合は、ステップS38で、マス目に4つ目の要素がすでに配置されているかをチェックし、配置されていない場合、すなわち、LV4、現X座標、現Y座標が0の場合は、ステップS39で、現グループ番号に100を掛けた値に現要素番号を加えた値をLV4、現X座標、現Y座標にセットし、当サブルーチン処理を終了し、元の処理に戻る。すでにマス目の4つ目の要素も配置されている場合は、ステップS40で、マス目に5つ目の要素がすでに配置されているかをチェックし、配置されていない場合、すなわち、LV5、現X座標、現Y座標が0の場合は、ステップS41で、現グループ番号に100を掛けた値に現要素番号を加えた値をLV5、現X座標、現Y座標にセットし、当サブルーチン処理を終了し、元の処理に戻る。すでにマス目の5つ目の要素も配置されている場合は、エラー処理エラーメッセージ出力等を行った上で処理を中止する。サブルーチン次要素処理では、現在の要素の位置を基点にして、上、下、右、左隣のマス目を次の要素の位置として配置処理を行う。すなわち、第2要素以降の従属要素直前のマス目の上下左右のマス目にしか置けない要素の配置処理である。以下、図20のフローチャートに沿って説明する。まず、ステップS51で、引数をサブルーチン内部変数に取り込む。ステップS52で、サブルーチン次要素配置処理を呼ぶ。その際、第1引数方向に上、第2引数グループ番号に現グループ番号、第3引数要素番号に次要素番号、第4引数X座標に現X座標、第5引数Y座標に現Y座標をセットする。ステップS53で、サブルーチン次要素配置処理を呼ぶ。その際、第1引数方向に下、第2引数グループ番号に現グループ番号、第3引数要素番号に次要素番号、第4引数X座標に現X座標、第5引数Y座標に現Y座標をセットする。ステップS54で、サブルーチン次要素配置処理を呼ぶ。その際、第1引数方向に右、第2引数グループ番号に現グループ番号、第3引数要素番号に次要素番号、第4引数X座標に現X座標、第5引数Y座標に現Y座標をセットする。ステップS55で、サブルーチン次要素配置処理を呼ぶ。その際、第1引数方向に左、第2引数グループ番号に現グループ番号、第3引数要素番号に次要素番号、第4引数X座標に現X座標、第5引数Y座標に現Y座標をセットする。当サブルーチン処理を終了し、元の処理に戻る。サブルーチン次要素配置処理では、引数で指定された方向のマス目に配置可能かをチェックし、配置可能ならサブルーチン要素配置処理を呼ぶ。なお、このサブルーチンは配置組み合わせ出力部メイン処理のステップS6で呼ばれたサブルーチンと同一で再帰関数となっている。以下、図21のフローチャートに沿って説明する。まず、ステップS61で、引数をサブルーチン内部変数に取り込む。ステップS62で、引数の方向を判定し、上ならばステップS63で現Y座標に1を減算した値を次Y座標に、現X座標を次X座標にセットし、ステップS69へ行く。ステップS64で、引数の方向を判定し、下ならばステップS65で現Y座標に1を加算した値を次Y座標に、現X座標を次X座標にセットし、ステップS69へ行く。ステップS66で、引数の方向を判定し、右ならばステップS67で現X座標に1を加算した値を次X座標に、現Y座標を次Y座標にセットし、ステップS69へ行く。引数の方向が上、下、右のいずれでもない場合はステップS68で現X座標に1を減算した値を次X座標に、現Y座標を次Y座標にセットし、ステップS69へ行く。ステップS69で、サブルーチン次要素チェック処理を呼ぶ。その際、第1引数グループ番号に現グループ番号、第2引数要素番号に現要素番号、第3引数X座標に次X座標、第4引数Y座標に次Y座標をセットする。ステップS70で,ステップS69で、サブルーチン次要素チェック処理の戻り値チェックOK又はチェックNGを判定し、チェックOKなら、ステップS71でサブルーチン要素配置処理を呼ぶ。当サブルーチン処理を終了し、元の処理に戻る。サブルーチン次要素チェック処理では、引数で指定された座標のマス目に配置可能かをチェックし、配置可能なら戻り値をチェックOKとし、配置不可なら戻り値をチェックNGとする。以下、図22のフローチャートに沿って説明する。まず、ステップS81で、引数をサブルーチン内部変数に取り込む。ステップS82で、次X座標が1からマス目の列数までの範囲内にあるかどうかをチェックし、範囲外であれば、戻り値にチェックNGをセットして、当サブルーチン処理を終了し、元の処理に戻る。ステップS83で、次Y座標が1からマス目の行数までの範囲内にあるかどうかをチェックし、範囲外であれば、戻り値にチェックNGをセットして、当サブルーチン処理を終了し、元の処理に戻る。ステップS84で、次X座標と次Y座標が指し示すマス目に、引数の現グループ番号と同じグループの要素がすでに置かれているかどうかを、メモリ02図14の配列変数LV1,次X座標,次Y座標、LV2,次X座標,次Y座標、LV3,次X座標,次Y座標、LV4,次X座標,次Y座標、LV5,次X座標,次Y座標のレベル値の100の位を現グループ番号と比較し、同じグループの要素がすでに置かれている場合は戻り値にチェックNGをセットして、当サブルーチン処理を終了し、元の処理に戻る。ステップS86で、サブルーチン重なり配置可能チェックを呼ぶ。その際、第1引数X座標に次X座標、第2引数Y座標に次Y座標をセットする。その結果により、重なり可能であれば戻り値にチェックOKを、重なり不可であれば戻り値にチェックNGをセットして、当サブルーチン処理を終了し、元の処理に戻る。サブルーチン重なり配置可能チェックでは、引数で指定された座標のマス目に重なり配置が可能かどうかをチェックし、配置可能なら戻り値をチェックOKとし、配置不可なら戻り値をチェックNGとする。以下、図23のフローチャートに沿って説明する。まず、ステップS91で、引数をサブルーチン内部変数に取り込む。ステップS92で、引数で指定されたマス目1箇所だけで、重なり数を超えてしまうかどうかをチェックする。すなわち、重なり数がNN=0~4の場合、すでにLVN1,X座標,Y座標が0以外であれば、チェックNGとして当サブルーチン処理を終了し、元の処理に戻る。ステップS93では、重なり数が1以上の場合に以下のチェックを行う。最初に引数で指定されたマス目について現時点の重なり数に1をプラスした値を算出する。次に、引数で指定されたマス目を除くすべてのマス目において現時点の重なり数を合計した値を算出する。そして、両者を合わせた値が重なり数を超えるかどうかをチェックする。超えた場合はチェックNG、超えない場合はチェックOKとして当サブルーチン処理を終了し、元の処理に戻る。この算出では、座標x,yのマス目の重なり数は、LV5,x,yが0以外なら4、LV4,x,yが0以外なら3、LV3,x,yが0以外なら2、LV2,x,yが0以外なら1とカウントする。サブルーチンマス目レベル値クリア処理は、メモリ02図14の第1重なり要素レベル値から第5重なり要素レベル値が引数で指定されたレベル値と同じ又は大きい値の場合にゼロクリアする。これは指定した要素とその下位レベルの要素のマス目への配置をクリアする処理である。以下、図24のフローチャートに沿って説明する。ステップS101で、ループ処理で使用するマス目のX座標列番号変数xとY座標行番号変数yを1に初期化し、ステップS109とステップS110で変数xと変数yに1を加算しながら、ステップS102とステップS103で変数xと変数yの上限チェックを行い、ステップS104からステップS108の処理を繰り返す。ステップS104で、LV1,x,yが引数のレベル値以上ならゼロクリアする。ステップS105で、LV2,x,yが引数のレベル値以上ならゼロクリアする。ステップS106で、LV3,x,yが引数のレベル値以上ならゼロクリアする。ステップS107で、LV4,x,yが引数のレベル値以上ならゼロクリアする。ステップS108で、LV5,x,yが引数のレベル値以上ならゼロクリアする。当サブルーチン処理を終了し、元の処理に戻る。処理が終了すると、算出されたすべての組み合わせパターンの各マス目の配置要素レコードレイアウトは図6を参照と各要素のマス目位置レコードレイアウトは図7を参照が外部メモリに出力される。サブルーチン次グループ処理は、第2グループ以降の第1要素独立要素を配置する処理である。以下、図25のフローチャートに沿って説明する。ステップS111で、引数の次グループ番号を内部変数に取り込む。ステップS112で、ループ処理で使用するマス目のX座標列番号変数xとY座標行番号変数yを1に初期化し、ステップS118とステップS119で変数xと変数yに1を加算しながら、ステップS113とステップS114で変数xと変数yの上限チェックを行い、ステップS115からステップS117の処理を繰り返す。ステップS115で、サブルーチン重なり配置可能チェックを呼ぶ。その際、第1引数X座標にX座標列番号変数x、第2引数Y座標にY座標行番号変数yをセットする。その結果により、配置可能であればステップS117へ、配置不可であればステップS118へ行く。サブルーチン重なり配置可能チェックでは、引数で指定された座標のマス目に重なり配置が可能かどうかをチェックし、配置可能なら戻り値をチェックOKとし、配置不可なら戻り値をチェックNGとする。ステップS117で、サブルーチン要素配置処理を呼ぶ。その際、第1引数現グループ番号に次グループ番号、第2引数現要素番号に1、第3引数現X座標に変数x、第4引数現Y座標に変数yをセットする。次に、唯一解出力部プログラムをメモリ02にロードして起動させる。起動すると、ディズプレイ03に唯一解出力部画面図16が表示される。キーボード04から画面に表示されたパターン分類30と重なり要素関係分類31を選択し、唯一解算出の各種制約条件の優先順位321~9、1が最高優先、9が最低優先を入力し、処理実行ボタン34を押下してプログラムを起動する。処理が終了すると、算出された唯一解のレコードレイアウトは図8を参照が外部メモリ01に出力される。各種制約条件の優先順位は以下の9種類から指定できる。各グループ第3要素以降はこの実施例では対象外としている。各グループ第1要素配置場所指定各グループ第2要素配置場所指定各グループ最終要素配置場所指定第1重なり配置場所指定第2重なり配置場所指定第3重なり配置場所指定第4重なり配置場所指定第5重なり配置場所指定第6重なり配置場所指定ここでは、制約条件の優先順位は次のとおりとする。各グループ第1要素位置指定優先順位第1位第1重なり配置場所指定優先順位第2位各グループ第2要素位置指定優先順位第3位各グループ最終要素位置指定優先順位第4位すなわち、まず、各グループ第1要素位置指定で唯一解の有無を調べ、唯一解がなければ、各グループ第1要素位置指定に加えて、第1重なり配置場所指定で唯一解の有無を調べ、唯一解がなければ、更に各グループ第2要素位置指定を制約条件に加えて唯一解の有無を調べる。以上のように順に制約条件を追加しながら唯一解が見つかるまで繰り返す。なお、マス目の列数と行数、各グループの要素数、唯一解算出条件の各種制約条件の優先順位を固定でセットするか、テキストファイルの読み込みでセットすることも可能だが、ここでは画面から変更可能とした実施例で説明する。以下、図26のフローチャートに沿って、CPU05で実行されるプログラムの流れを説明する。ステップS120で、キーボード04から入力されたパターン分類30と重なり要素関係分類31、また唯一解算出条件の各種制約条件の処理優先順位を取得する。ステップS121で、制約条件の優先順位に従って、各種制約条件の処理に未処理があるかどうかを判定し、未処理が無い場合は処理を終了する。ステップS122で、組み合わせパターンのレコードからステップS120で読み込んだパターン分類と要素関係分類に一致するレコードのみを抽出する命令文を組み立てる。ここでは、重なり数が1の実施例で説明する。例えば、パターン分類PTYPEとして44755、重なり要素関係分類DUPTYPEとしてP4R5第1グループの第4要素と第3グループの第5要素が重なる関係が選択された場合は、配置組み合わせ各要素のマス目位置レコード図7のPTYPEパターン分類番号が44755、DUPU1重なり要素の上位の要素を示す記号がP4、DUPD1重なり要素の下位の要素を示す記号がR5のデータを抽出する。ステップS123で、ステップS122で作成した抽出レコード上記例では992件に対し、各種制約条件の第1優先順位である各グループ第1要素位置の3つの要素P1、Q1、R1を集計キーとして集計レコードを作成して、集計キーごとに抽出レコードを何件ずつ集計したのかを調べる。例えば、P1第1グループの第1要素をA1のマス目、Q1第2グループの第1要素をA2のマス目、R1第3グループの第1要素をA3のマス目に配置する場合の集計件数は2件になるので唯一解にはならない。しかし、P1をA4のマス目、Q1をC3のマス目、R1をB2のマス目に配置する場合の集計件数は1件となるので唯一解になる。また、P1をC3のマス目、Q1をA4のマス目、R1をB3のマス目に配置する場合の集計件数も1件となるので唯一解になる。図1はこの唯一解の応用例である。以上のようにすべての集計キーごとに唯一解になるかどうかを調べる。この例のように、各グループ第1要素位置指定のみで唯一解が見つかった場合は、その内容を出力して処理を終了することになる。すなわち優先順位第2位以下の条件追加は必要ないことになる。唯一解が存在しない場合は更に次の優先順位の第1重なり配置場所指定を条件に追加し、ステップS122で作成した抽出レコードに対し、P1、Q1、R1、DUPPOS1第1重なり配置場所を集計キーとして集計レコードを作成して、集計キーごとの集計レコードの集計件数が1唯一解になるかどうかをチェックする。唯一解が存在しない場合は更に次の優先順位である各グループ第2要素位置指定を条件に追加し、ステップS122で作成した抽出レコードに対し、P1、P2、Q1、Q2、R1、R2,DUPPOS1を集計キーとして集計レコードを作成して、集計キーごとの集計レコードの集計件数が1唯一解になるかどうかをチェックする。ステップS124で、唯一解が存在した場合は次の出力処置を実行し、存在しない場合は次の優先順位の条件による処理へ行く。ステップS125で、唯一解のレコードレイアウトは図8を参照を外部メモリ01に出力し処理を終了する。IDはレコード出力ごとに1からの連番を出力する。PIDは配置組み合わせレコードのレコード識別番号をそのまま出力する。PTYPEは配置組み合わせレコードのパターン分類番号をそのまま出力する。DUPTYPEはステップS1で入力された重なり要素関係分類。次に、一段階方式について説明する。以下、図31以降のフローチャートに沿ってプログラムの流れを説明する。ステップS130で、キーボード04から入力された一段階方式唯一解算出画面その1は図28、その2は図29。両者は切り替えボタン49で切り替え可能のマス目の列数40、行数41、グループ数42、各グループの要素数43、制約条件グループ要素単位47又は制約条件マス目単位48をメモリ02図30の対応する変数領域列数は50、行数は51、グループ数は52、重なり要素数53、各グループの要素数は54、制約条件はステップS131に詳述にセットする。ステップS131で、上記ステップで読み込んだ制約条件としての初期配置を配列変数LVIL,X,Yに保存する。Lは重なり順位、Xは重なり位置の列座標、Yは重なり位置の行座標で、グループ番号に100を掛けた値に要素番号を加算した値をセットし、初期値未設定は0とする。例えばC列2行列座標:3、行座標:2のマス目に第3グループ第3要素と第5グループ第2要素が初期設定される場合は、LVI1,3,2に303、LVI2,3,2に502をセットする。上記のように1つのマス目に2つの要素が重なる場合は、配列変数LVIL,X,YのLは、グループ番号の昇順に、最初の要素ではL=1、次の要素ではL=2となる。また、制約条件としての初期配置を配列変数WXIG,E、WYIG,Eに保存する。Gはグループ番号、Eは要素番号で、WXIには列座標、WYIには行座標をセットし、初期値未設定は0とする。例えばC列2行列座標:3、行座標:2のマス目に第3グループ第3要素と第5グループ第2要素が初期設定される場合は、WXI3、3に3、WYI3、3に2をセットするとともに、WXI5、2に3、WYI5、2に2をセットする。一段階方式唯一解算出画面その1図28とその2図29の違いは、前者は初期配置するグループ、要素のマス目位置を指定するのに対し、後者は初期配置するマス目のグループ、要素を指定する点で、両者は裏表の関係になる。なお、1つのマス目に2つの要素を初期配置する場合、後者においてはグループ番号の小さい要素を上段に、大きい要素を下段に設定することとする。この実施例の画面では初期配置の段階で1つのマス目に3つ以上の要素を重ねる場合には対応していない。ステップS132で、ループ処理で使用するマス目のX座標列番号変数xとY座標行番号変数yを1に初期化し、ステップS139とステップS141で変数xと変数yに1を加算しながら、ステップS133とステップS134で変数xと変数yの上限チェックを行う。その間、ステップS135からステップS138の処理を繰り返す。ただし、ステップS140で、第1グループ第1要素の初期配置が設定されている場合はループ処理を行わずに処理を終了する。ステップS131で、初期配置処理サブルーチン図32を呼ぶ。このサブルーチンでは、一段階方式唯一解算出画面その1図28とその2図29の制約条件からメモリ02図30の初期配置重なり要素レベル値56と各要素のマス目への初期配置位置58を設定する。ステップS135で、初期配置重なり要素レベル値56の全配列要素を重なり要素レベル値55にコピーする。また、各要素のマス目への初期配置位置58の全配列要素を各要素のマス目への配置位置57にコピーする。ステップS136で、第1グループ第1要素の初期配置設定値WXI1,1が0、すなわち未設定ならばステップS138へ行き、通常のループ処理を行う。設定済ならばステップS137を実行し、第1グループ第1要素の初期配置設定値WXI1,1をxに、WYI1,1をyにセットする。また、この場合は、ステップS140で処理を終了し、ループ処理は行わない。ステップS138で、サブルーチン要素配置処理図33を呼ぶ。その際、第1引数現グループ番号に1、第2引数現要素番号に1、第3引数現X座標に変数x、第4引数現Y座標に変数yをセットする。サブルーチン要素配置処理では、最初に、引数で渡される現在の要素をマス目に配置する処理ステップS161の各要素のマス目への配置位置保存とステップS162の重なり要素レベル値設定を行うとともに、次の要素の処理へつなげる。最後に、ステップS166で、マス目レベル値クリア処理を実行する。これは引数で指定したレベル値以下、すなわち現要素とその下位レベルの要素のマス目への配置をクリアする処理である。以下、図33のフローチャートに沿って説明する。まず、ステップS160で、引数をサブルーチン内部変数に取り込む。ステップS161で、各要素のマス目への配置位置を保存する変数57図30。X座標はWX、Y座標はWY、第1添字はグループ番号、第2添字は要素番号に現X座標と現Y座標をセットする。ステップS162で、サブルーチンマス目レベル値設定処理図19を呼ぶ。その際、第1引数グループ番号に現グループ番号、第2引数要素番号に現要素番号、第3引数X座標に現X座標、第4引数Y座標に現Y座標をセットする。ステップS163で、第2引数の現要素番号に1を加算して次要素番号を算出する。次のステップS164で、この次要素番号がその属するグループの最大要素番号を超えたかどうかを判定し、超えない場合、すなわち次要素番号が存在する場合はステップS165、超える場合、すなわち次要素番号が存在しない場合はステップS167を処理する。ステップS165で、サブルーチン次要素処理図34を呼ぶ。その際、第1引数グループ番号に現グループ番号、第2引数要素番号に次要素番号、第3引数X座標に現X座標、第4引数Y座標に現Y座標をセットする。その処理後ステップS166へ行く。ステップS167で、第1引数の現グループ番号に1を加算した値を次グループ番号とする。次のステップS168で、この次グループ番号がメモリ02図30のグループ数52を超えたかどうかを判定し、超えない場合、すなわち次グループ番号が存在する場合はステップS169、超える場合、すなわち次グループ番号が存在しない場合はステップS170の出力処理を実行し、ステップS171で出力件数を1加算する。ステップS172で、出力件数が1を超えたかどうかを判定し、1を越えた場合はステップS173で画面画面28又は画面29に唯一解ではありませんというメッセージを出力後、処理を終了する。1を超えない場合は、画面画面28又は画面29の件数欄46に1を出力し、ステップS166へ行く。ステップS169で、サブルーチン次グループ処理図35を呼ぶ。その際、引数グループ番号に次グループ番号をセットする。ステップS170で、メモリ02に保存されている組み合わせデータを唯一解レコードとして外部メモリ01に出力する。出力項目は図36のとおり。IDはこのレコードの連番である。このレイアウトのP1以降は、グループ数が5で、各グループの要素数が7-7-7-5-5の場合の各マス目の位置を示す文字列A1、A2F5等を保存する項目である。P1以降のマス目の位置が初期配置する場合は、マス目の位置を示す文字列の末尾にアスタリスクを付加する。サブルーチン次要素処理一段階方式では、引数で渡された現在の要素の位置を基点にして、上、下、右、左のマス目を次の要素の位置として配置処理を行う。又は、次要素が初期配置済の場合は次要素の配置処理を行う。以下、図34のフローチャートに沿って説明する。まず、ステップS180で、引数をサブルーチン内部変数に取り込む。ステップS181で、次要素が初期配置されているかどうかを判定し、設定済の場合はステップS186へ行き、未設定の場合は、ステップS182へ行く。なお、初期配置における同一グループ内の要素は必ず上下左右に隣り合って配置されているものとする。例えば、図29のようにT1とT2はそれぞれD列2行、C列2行に配置され、左右に隣り合って配置されている。従って、このサブルーチンでは、初期配置がなければ、T2の配置位置はD列1行、D列3行、E列2行、C列2行の4つになるが、初期配置がある場合は残りの3つの配置は対象外になる。以下、ステップS182からS185は初期配置がない場合に実行する。ステップS182で、サブルーチン次要素配置処理を呼ぶ。その際、第1引数方向に上、第2引数グループ番号に現グループ番号、第3引数要素番号に次要素番号、第4引数X座標に現X座標、第5引数Y座標に現Y座標をセットする。ステップS183で、サブルーチン次要素配置処理を呼ぶ。その際、第1引数方向に下、第2引数グループ番号に現グループ番号、第3引数要素番号に次要素番号、第4引数X座標に現X座標、第5引数Y座標に現Y座標をセットする。ステップS184で、サブルーチン次要素配置処理を呼ぶ。その際、第1引数方向に右、第2引数グループ番号に現グループ番号、第3引数要素番号に次要素番号、第4引数X座標に現X座標、第5引数Y座標に現Y座標をセットする。ステップS185で、サブルーチン次要素配置処理を呼ぶ。その際、第1引数方向に左、第2引数グループ番号に現グループ番号、第3引数要素番号に次要素番号、第4引数X座標に現X座標、第5引数Y座標に現Y座標をセットする。ステップS182からステップS185までの処理が終了したらサブルーチンから元の処理に戻る。ステップS186は制約条件としての初期配置がある場合の処理である。ここでは、メモリ02図30の各要素のマス目への処理配置位置58から、次要素の初期配置座標を読み取り、次X座標、次Y座標とする。ステップS187で、サブルーチン要素配置処理図33を呼ぶ。その際、第1引数現グループ番号に現グループ番号、第2引数現要素番号に次要素番号、第3引数現X座標に次X座標、第4引数現Y座標に次Y座標をセットする。当サブルーチン処理を終了し、元の処理に戻る。サブルーチン次グループ処理一段階方式は、第2グループ以降の各グループの第1要素を配置する処理である。以下、図35のフローチャートに沿って説明する。ステップS190で、引数の次グループ番号をサブルーチン内部変数gに取り込む。ステップS191で、ループ処理で使用するマス目のX座標列番号変数xとY座標行番号変数yを1に初期化し、ステップS199とステップS201で変数xと変数yに1を加算しながら、ステップS192とステップS193で変数xと変数yの上限チェックを行い、ステップS194からステップS198の処理を繰り返す。ステップS194で、第gグループ第1要素の初期配置設定値WXIg,1が0、すなわち未設定ならばS196へ行き、通常のループ処理を行う。設定済ならばステップS195を実行し、第gグループ第1要素の初期配置設定値WXIg,1をxに、WYIg,1をyにセットする。また、この場合は、ステップS200で処理を終了し、ループ処理は行わない。ステップS196で、サブルーチン重なり配置可能チェックを呼ぶ。その際、第1引数X座標にX座標列番号変数x、第2引数Y座標にY座標行番号変数yをセットする。その結果により、配置可能であればステップS198の要素配置処理を実行し、配置不可であればステップS199へ行く。サブルーチン重なり配置可能チェックでは、引数で指定された座標のマス目に重なり配置が可能かどうかをチェックし、配置可能なら戻り値をチェックOKとし、配置不可なら戻り値をチェックNGとする。ステップS198で、サブルーチン要素配置処理を呼ぶ。その際、第1引数現グループ番号に次グループ番号、第2引数現要素番号に1、第3引数現X座標に変数x、第4引数現Y座標に変数yをセットする。以下に、隣接定義がされている要素配置場所が配された平面を使った実施例2を説明する。図37aのような、複数の要素配置場所があって、各要素配置場所がどの要素配置場所と隣接するかが、現実の地理区域や線路航路に基づいてあらかじめ定義されている平面と、以下のような複数の旅程が提示され、唯一の配置法を見つけるパズルである。1佐渡金山-善光寺-山中湖-寸又峡2一乗谷-兼六園-白川郷3黒部ダム-長良川鵜飼-犬山城上記観光地を所在地都道府県に置き換えると次のようになる。1新潟-長野-山梨-静岡2福井-石川-岐阜3富山-岐阜-愛知この3つの旅程は次の3つのグループの要素に対応する。グループの順番は要素数の降順とする。1P1-P2-P3-P4第1グループの4つの要素2Q1-Q2-Q3第2グループの3つの要素3R1-R2-R3第3グループの3つの要素以上のグループ要素が図37aのような要素配置場所に配置する方法はただ一通りかの判定を行う装置について、図42以降のフローチャートに沿って説明する。ステップS210で、隣接定義方式唯一解判定画面図39の配置場所数60、グループ数61、各グループの要素数62、初期配置設定63、配置場所間隣接定義64をメモリ02図40の対応する変数領域配置場所数70、グループ数71、各グループの要素数72、その他にセットする。その他については下記で詳述する。入力されたグループの要素数の合計値から配置場所数を減算した値をメモリ02図40の重なり要素数73にセットするとともに、画面図39の重なり要素数66にセットする。この実施例では、第1グループ要素数が4、第2グループ要素数が3、第3グループ要素数が3で、配置場所数が9になるので、重なり要素数は1となる。また、配置場所間隣接定義64をメモリ02図40の隣接定義77、すなわちCXに保存する。添え字のXは配置場所を表す数字実施例では1~9であり、以下のように各配置場所との隣接有無を5桁単位の0又は1でセットする。例えば、図38aの場合は以下のように表す。各要素配置場所X1~X9の他要素配置場所X1~X9との隣接定義を0隣接無と1隣接有で表す。自分自身との隣接定義個所は0とし、要素配置場所を5単位に区切り、5に満たない個所は0で埋める。図38aの例ではX10は存在しないのでその個所は0とする。C10100100000C21010100000C30101101000C40010001000C51110011000C60000101100C70011110110C80000011010C90000001100制約条件として要素間隣接定義を使用する場合は、隣接定義方式唯一解判定画面図39に要素間隣接定義ボタンを追加する。このボタンが押下されたら、要素間隣接定義作成画面図50を表示し、各要素を配置する要素配置場所を指定する。図50の設定例では、要素P1第1グループ第1要素は要素配置場所X4新潟に配置しているがその場合、図39の配置場所間隣接定義64よりX3富山とX7長野のみに隣接可能なので、R1第3グループ第1要素とP2第1グループ第2要素のみに要素間隣接が可能である。そこで、戻るボタン押下時に、各要素配置場所における要素間隣接の可否をメモリ02図40の要素間隣接定義80、すなわちDXに保存する。Xは要素を表す数字実施例では1~10であり、以下のように各要素配置場所との要素間隣接可否を5桁単位の0又は1でセットする。例えば、図39、図50の場合は以下のようになる。各要素P1~P4、Q1~Q3、R1~R3の他要素との要素間隣接定義を0隣接不可と1隣接可で表す。自分自身との要素間隣接定義個所は0とし、要素配置場所を5単位に区切り、5に満たない個所は0で埋める。以下左列からP1、P2、P3、P4、Q1、Q2、Q3、R1、R2、R3の順に隣接可否1/0をセットP1D10100000100P2D21011001111P3D30101000000P4D40110000000Q1D50000011010Q2D60000101110Q3D70100110101R1D81100011010R2D90100110101R3D100100001010ステップS211で、ステップS210で読み込んだ初期配置設定63を配置場所初期配置要素レベル値76、すなわち配列変数LIL,Xに保存する。Lは重なり順位、Xは配置場所を表す数字実施例では1~9で、グループ番号実施例では1~3に100を掛けた値に要素番号実施例では1~4を加算した値をセットし、未設定の場合は0をセットする。初期配置の段階で1つの配置場所に2つの要素が重なる場合は、グループ番号の昇順に、最初の要素ではL=1、次の要素ではL=2となる。例えば、第2グループ第3要素と第3グループ第2要素が配置場所X=5で重なっている場合は、LI1,5に203、LI2,5に302をセットする。また、初期配置設定63は各要素配置場所初期値79、すなわち配列変数WIG,Eにも保存する。Gはグループ番号、Eは要素番号で、配置場所を表す数字実施例では1~9をセットし、未設定の場合は0をセットする。図40の実施例ではグループ数の最大値を5、要素数の最大値を7としてメモリ領域を確保している。ステップS212で、ループ処理で使用する要素配置場所の座標変数xを1に初期化し、ステップS219で変数xに1を加算しながら、ステップS213で変数xの上限チェックを行い、ステップS214からステップS219の処理を繰り返す。配置場所数が9の実施例では、この処理を9回変数xを1~9繰り返すことになる。ステップS214で、配置場所初期配置要素レベル値76を配置場所配置要素レベル値75にコピーする。また、各要素配置場所初期値79を各要素配置場所78にコピーする。ステップS215で、第1グループ第1要素の各要素配置場所初期値WI1,1が0未設定ならばS217へ行き、通常のループ処理を行う。設定済ならばステップS216を実行し、第1グループ第1要素の初期配置設定値WI1,1をxにセットする。また、この場合は、ステップS218で処理を終了し、ループ処理は行わない。ステップS217で、サブルーチン要素隣接配置処理図43を呼ぶ。その際、第1引数現グループ番号に1、第2引数現要素番号に1、第3引数現配置場所に変数xをセットする。サブルーチン要素隣接配置処理では、最初に、引数で渡される現在の要素を配置する処理ステップS221の各要素配置場所への配置位置保存とステップS222のレベル値設定を行うとともに、次の要素の処理へつなげる。最後に、ステップS233で、引数で渡される現在の要素配置場所とその下位レベルの配置をクリアする処理を行う。以下、図43のフローチャートに沿って説明する。まず、ステップS220で、引数をサブルーチン内部変数に取り込む。ステップS221で、各要素配置場所を保存する変数78図40。W、第1添字はグループ番号、第2添字は要素番号に現配置場所1~9をセットする。ステップS222で、サブルーチンレベル値設定処理図44を呼ぶ。その際、第1引数グループ番号に現グループ番号、第2引数要素番号に現要素番号、第3引数配置場所に現配置場所をセットする。ステップS223で、第2引数の現要素番号に1を加算して次要素番号とする。次のステップS224で、この次要素番号がその属するグループの最大要素番号を超えたかどうかを判定し、超えない場合、すなわち次要素番号が存在する場合はステップS225、超える場合、すなわち次要素番号が存在しない場合はステップS226を処理する。ステップS225で、サブルーチン次要素処理図45を呼ぶ。その際、第1引数グループ番号に現グループ番号、第2引数要素番号に次要素番号、第3引数配置場所に現配置場所をセットする。その処理後ステップS233へ行く。ステップS226で、第1引数の現グループ番号に1を加算した値を次グループ番号とする。次のステップS227で、この次グループ番号がメモリ02図40のグループ数71を超えたかどうかを判定し、超えない場合、すなわち次グループ番号が存在する場合はステップS228、超える場合、すなわち次グループ番号が存在しない場合はステップS229の出力処理を実行し、ステップS230で出力件数に1を加算する。ステップS229の出力処理では、メモリ02図40に保存されている各要素の配置場所データを唯一解レコードとして外部メモリ01に出力する。出力項目は図41のとおり。出力項目のうち、パターン分類PTYPEは以下のように算出した値をセットする。1隣接定義の32進表記C1からC9の5桁の2進数を1桁の32進文字0~9,A~Vに変換する。第1要素の隣接定義90第2要素の隣接定義L0第3要素の隣接定義B8第4要素の隣接定義48第5要素の隣接定義SO第6要素の隣接定義1C第7要素の隣接定義7M第8要素の隣接定義0Q第9要素の隣接定義0C2配置場所位相を表す文字列の生成頭3桁に要素配置場所数、4桁目以降に上記32進文字列を順に追加して、00990L0B848SO1C7M0Q0Cという配置場所位相を表す文字列を生成する。3パターン分類の生成配置場所位相を表す文字列に書くグループの要素数を連結した文字列をパターン分類とする。例えば、要素4-3-3の場合は、以下のようになる。00990L0B848SO1C7M0Q0C433パターン分類を表す記号は、要素配置場所がマス目の場合は、1桁目はマス目の列数、2桁目はマス目の行数、3桁目以降は各グループの要素数とする。要素配置場所の位相の場合は、要素配置場所の位相を表す文字列に続けて各グループの要素数とする。ステップS231で、出力件数が1を超えたかどうかを判定し、1を越えた場合は画面図39に唯一解ではありませんというメッセージを出力後、処理を終了する。1を超えない場合は、画面図39の件数欄67に1を出力し、ステップS233へ行く。ステップS228で、サブルーチン次グループ処理図49を呼ぶ。その際、引数グループ番号に次グループ番号をセットする。その処理後ステップS233へ行く。ステップS233で、現グループ番号に100を掛けた値に現要素番号を加算した値を引数レベル値にセットし、サブルーチンレベル値クリア処理を呼ぶ。この処理により現在の設置場所の要素とその下位レベルの要素への配置がすべてクリアされる。要素間隣接定義を制約条件として使用する場合は、サブルーチン要素隣接配置処理のステップS227以降は図51のようになる。すなわち、ステップS234で要素配置組み合わせが要素間隣接定義を満たしているかどうかをチェックし、満たしていればステップS229以降の処理を行い、満たしていなければステップS233へ行く。サブルーチンレベル値クリア処理は、メモリ02図40の配置場所配置要素レベル値75の値が引数で指定されたレベル値と同じ又は大きい値の場合にゼロクリアする処理である。これは指定した要素とその下位レベルの要素の配置場所への配置を取り消す処理である。当サブルーチン処理を終了し、元の処理に戻る。サブルーチン次要素処理図45では、現在の要素の配置場所を基点にして隣接する配置場所を次の要素の位置として配置処理を行う。すなわち、第2要素以降の従属要素直前の配置場所に隣接する配置場所にしか置けない要素の配置処理である。以下、図45のフローチャートに沿って説明する。ステップS250で、引数をサブルーチン内部変数に取り込む。ステップS251で、ループ処理で隣接位置を表す変数として使用する隣接番号に1をセットする。ステップS252で、隣接番号が配置場所数を超えたら、当サブルーチンから元の処理に戻る。超えなければ、ステップS253以下の処理を実行する。ステップS253で、メモリ02図40の隣接定義77の変数C添え字が現配置場所の値配置場所数の長さの文字列は現配置場所における他の配置場所との隣接有無が配置場所順にセットされているので、その文字列の頭から隣接番号番目の文字が0なら隣接無と判断しステップS256へ行く。また1ならば隣接有と判断し、ステップS255の次要素配置処理を実行する。ステップS255で、サブルーチン次要素配置処理を呼ぶ。その際、第1引数に隣接番号、第2引数に現グループ番号、第3引数に次要素番号、第4引数に現配置場所をセットする。ステップS256で隣接番号に1を加算して、ステップS252に戻る。サブルーチン次要素配置処理では、引数で指定された隣接番号の配置場所に配置可能かをチェックし、配置可能ならサブルーチン要素隣接配置処理を呼ぶ。なお、このサブルーチンはメイン処理のステップS217で呼ばれたサブルーチンと同一で再帰関数となっている。以下、図46のフローチャートに沿って説明する。まず、ステップS260で、引数をサブルーチン内部変数に取り込む。ステップS261で、サブルーチン配置可能チェックを呼ぶ。その際、第1引数次配置場所に隣接番号をセットする。その結果により、チェックOKであればサブルーチン要素隣接配列処理を実行する。その際、第1引数に現グループ番号、第2引数に次要素番号、第3引数に次配置場所をセットする。当サブルーチン処理を終了し、元の処理に戻る。チェックNGであれば当サブルーチン処理を終了し、元の処理に戻る。サブルーチン配置可能チェックでは、引数で指定された配置場所に配置が可能かどうかをチェックし、配置可能なら戻り値をチェックOKとし、配置不可なら戻り値をチェックNGとする。以下、図47のフローチャートに沿って説明する。まず、ステップS270で、引数をサブルーチン内部変数に取り込む。ステップS271で、引数で指定された配置場所1箇所だけで、メモリ02図40の重なり要素数73を超えてしまうかどうかをチェックする。すなわち、L2,配置場所が0以外であれば、チェックNGとして当サブルーチン処理を終了し、元の処理に戻る。ステップS272では、メモリ02図40の重なり要素数73が1以上の場合に以下のチェックを行う。最初に引数で指定された配置場所について現時点の重なり数に1をプラスした値を算出する。次に、引数で指定された配置場所を除くすべてのマス目において現時点の重なり数を合計した値を算出する。そして、両者を合わせた値が重なり要素数を超えてしまうかどうかをチェックする。超えた場合はチェックNG、超えない場合はチェックOKとして当サブルーチン処理を終了し、元の処理に戻る。サブルーチン次グループ処理は、第2グループ以降の第1要素独立要素を配置する処理である。以下、図49のフローチャートに沿って説明する。ステップS290で、引数の次グループ番号を内部変数gに取り込む。ステップS291で、ループ処理で使用する配置場所数を保持する変数xを1に初期化し、ステップS296で変数xに1を加算しながら、ステップS292で変数xの上限チェックを行い、ステップS293からステップS295の処理を繰り返す。ステップS293で、サブルーチン配置可能チェック既出を呼ぶ。その際、引数に変数xをセットする。その結果により、配置可能であればステップS295で要素隣接配置処理既出、再帰関数を実行した後にステップS296へ行く。配置不可であればステップS296へ行く。ステップS295で、サブルーチン要素配置処理を呼ぶ際、第1引数現グループ番号に次グループ番号、第2引数現要素番号に1、第3引数配置場所に変数xをセットする。次に、以上の装置により算出された唯一解を利用したパズルの提供方法について、五七五の俳句を題材とした実施例1と、都道府県の観光地の旅程を題材とした実施例2を説明する。実施例1は、図1aのような3つの句からなる俳句と、図1bのような制約条件としていくつかのモーラが配置された縦4列横4行に区切られたマス目の描かれた平面を提示し、残りのモーラの配置を探すパズルゲームへの応用である。ルールは以下のとおりとする。1各グループの第1要素は配置場所のいずれにも配置することができる。この性質を独立という21つのグループに属する隣り合う要素は隣接して配置マス目の場合は上下左右に配置しなければならない。すなわち、第2要素以降は直前の要素に隣接して配置する。この性質を従属という31つのグループに属する要素同士は、同じ要素であっても1つの配置場所に重ねて配置することができない。4異なるグループに属する要素同士は、同じ要素であれば1つの配置場所に重ねて配置することができる。5配置場所に空きが出来ないように、提示されたグループの要素すべてを配置場所に配置する。第1グループかわずとびこむ、第2グループふるいけや、第3グループみずのおとの中で、第1グループ第3要素P3と第3グループ第2要素R2および、第1グループ第4要素P4と第3グループ第5要素R5のそれぞれの要素が共通で、このいずれか1つが重なる場合なので、重なり要素関係分類はP3R2P4R5になる。別の例として、第1グループつるべとられて、第2グループあさがおに、第3グループもらいみずの中で、第1グループ第5要素P5と第3グループ第2要素R2の要素が共通なので、重なり要素関係分類はP5R2になる。別の例として、第1グループうしにひかれて、第2グループはるかぜや、第3グループぜんこうじの中で、第1グループ第1要素P1と第3グループ第4要素R4および、第1グループ第5要素P5と第2グループ第3要素Q3および、第2グループ第4要素Q4と第3グループ第1要素R1のそれぞれの要素が共通で、このいずれか1つが重なる場合なので、重なり要素関係分類はP1R4P5Q3Q4R1になる。実施例1では重なり数が1なので、重なり要素関係分類は、以下のようになる。1共通モーラが1組の場合第1グループ第3要素P3と第3グループ第2要素R2ならP3R2になる。2共通モーラが2組の場合P3R2P4R5のように記号で2つの組を合併する。これは第1グループ第3要素P3と第3グループ第2要素R2とが重なる組み合わせ、又は、第1グループ第4要素P4と第3グループ第5要素R5とが重なる組み合わせのいずれかという意味である。3共通モーラが3組の場合P3R2P4R3P6Q5のように3つの組み合わせを記号で合併する。重なり要素関係分類はP3R2P4R5は、重なり要素関係分類P3R2の配置組み合わせと重なり要素関係分類P4R5の配置組み合わせを合併したものになる。要素関係分類がP3R2P4R5の組み合わせレコードは1408件あるが、制約条件の優先順位第1位である各グループの第1要素位置、すなわち、第1グループ第1要素P1と第2グループ第1要素Q1と第3グループ第1要素R1の3つの要素をキーに集計して作成した集計結果レコードの集計レコード件数が1件の集計結果レコード唯一レコードは184件あり、パズル問題はこの唯一レコードから作成することができる。実施例1では重なり数は1だったが、重なり数が2の場合は、重なり要素関係分類は、以下のようになる。1共通モーラが2組の場合P3R2P4R5のように記号で2つの組を結合する。これは第1グループ第3要素P3と第3グループ第2要素R2とが重なる組み合わせと、第1グループ第4要素P4と第3グループ第5要素R5とが重なる組み合わせの共通部分という意味である。2共通モーラが3組の場合P3R2P4R3P3R2P6Q5P4R3P6Q5のように3つの共通部分を記号で合併する。3共通モーラが4組の場合4組の中から2組を選んで作成した6つの共通部分を記号で合併する。例えば、P3R2をA、P4R3をB、P6Q5をC、Q2R4をDと置き換えた場合、以下のようになる。ABACADBCBDCD重なり数が3の場合は、重なり要素関係分類は、以下のようになる。1共通モーラが3組の場合P3R2P4R5P6Q5のように記号で3つの組を合併する。これは第1グループ第3要素P3と第3グループ第2要素R2とが重なる組み合わせと、第1グループ第4要素P4と第3グループ第5要素R5とが重なる組み合わせと、第1グループ第6要素P6と第2グループ第5要素Q5とが重なる組み合わせの共通部分という意味である。2共通モーラが4組の場合4組の中から3組を選んで作成した4つの共通部分を記号で合併する。例えば、P3R2をA、P4R5をB、P6Q5をC、Q2R4をDと置き換えた場合、以下のようになる。ABCABDACDBCD"