(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024060392
(43)【公開日】2024-05-02
(54)【発明の名称】クロスワードパズル生成装置およびクロスワードパズル生成方法
(51)【国際特許分類】
A63F 9/00 20060101AFI20240424BHJP
A63F 13/80 20140101ALN20240424BHJP
G09B 1/40 20060101ALN20240424BHJP
G09B 5/02 20060101ALN20240424BHJP
G09B 7/02 20060101ALN20240424BHJP
【FI】
A63F9/00 503B
A63F13/80 E
G09B1/40
G09B5/02
G09B7/02
【審査請求】有
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2022167727
(22)【出願日】2022-10-19
(11)【特許番号】
(45)【特許公報発行日】2023-10-31
(71)【出願人】
【識別番号】504216550
【氏名又は名称】株式会社スクウェイブ
(74)【代理人】
【識別番号】100105784
【弁理士】
【氏名又は名称】橘 和之
(72)【発明者】
【氏名】林 昌宏
(72)【発明者】
【氏名】黒須 豊
【テーマコード(参考)】
2C028
【Fターム(参考)】
2C028AA03
2C028BC01
2C028BD01
(57)【要約】
【課題】任意の大きさの盤面に対して高密度に文字列を配置したクロスワードパズルを自由度高く生成できるようにする。
【解決手段】初期段階において黒マスを有していない盤面において、任意の文字数の1ワードを配置するための対象領域を設定する対象領域設定部1と、設定された対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置するワード配置部2とを備え、既にワードが配置された既存領域および対象領域を除く残存領域の中で、交差するマスの既存文字による制約および隣接するマスの既存文字による制約を受けずに次のワードを配置することが可能となる自由領域が最も広くなる位置に対象領域を設定することにより、次のワードを自由に配置可能な領域ができるだけ広くなるような余地を残しながらワードを順次配置していくことで、より多くのワードを配置することができるようにする。
【選択図】
図1
【特許請求の範囲】
【請求項1】
縦方向および横方向に任意の数のマス目を有し、文字の入らない黒マスを初期段階において有していない盤面に対し、複数の文字列を縦方向および横方向に配置することによってクロスワードパズルを生成するクロスワードパズル生成装置であって、
任意の文字数の1文字列を配置するための対象領域を上記盤面の中から設定する対象領域設定部と、
上記対象領域設定部により設定された上記対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1文字列を配置する文字列配置部とを備え、
上記対象領域設定部は、既に文字列が配置された既存領域および上記対象領域を除く残存領域の中で、交差するマスの既存文字による制約および隣接するマスの既存文字による制約を受けずに次の文字列を配置することが可能となる自由領域である次文字列自由領域が最も広くなる位置に上記対象領域を設定し、
上記対象領域設定部の処理および上記文字列配置部の処理を1文字列ずつ繰り返し実行することによって上記クロスワードパズルを生成するようにした
ことを特徴とするクロスワードパズル生成装置。
【請求項2】
上記対象領域設定部は、
上記対象領域の候補となる候補領域を上記盤面の中から抽出する候補領域抽出部と、
上記候補領域抽出部により抽出された候補領域の中から、上記次文字列自由領域が最も広くなる候補領域を選定して上記対象領域として設定する候補領域選定部とを備え、
上記候補領域抽出部は、領域内で文字が未設定となっている空白マスである領域内空白マスから見て領域設定方向とは異なる方向に隣接するマスが全て空白マスとなっていることを第1条件とし、当該領域内空白マスに文字が配置されることに伴って上記既存領域に配置済みの既存文字列が変更されないことを第2条件として、上記第1条件および上記第2条件を満たす領域を上記候補領域として抽出する
ことを特徴とする請求項1に記載のクロスワードパズル生成装置。
【請求項3】
上記候補領域抽出部は、上記盤面の横方向の最初の1行目および縦方向の最初の1列目で交差不可能な状態のとき以外は、上記領域内空白マスおよび上記領域設定方向とは異なる方向の上記既存領域と交差するマスである交差マスを含む複数のマスから成る領域を上記候補領域として抽出することを特徴とする請求項2に記載のクロスワードパズル生成装置。
【請求項4】
上記対象領域設定部は、上記最初の1行目および上記最初の1列目については例外的に、上記次文字列自由領域が最も広くなるという条件を適用せず、上記候補領域の抽出もせずに、上記第2条件を満たす領域を上記対象領域として設定することを特徴とする請求項3に記載のクロスワードパズル生成装置。
【請求項5】
上記候補領域抽出部は、上記第1条件および上記第2条件を満たす限りにおいて最長で取り得る範囲を上記候補領域として抽出することを特徴とする請求項2~4の何れか1項に記載のクロスワードパズル生成装置。
【請求項6】
上記候補領域抽出部は、上記領域内空白マスおよび上記領域設定方向とは異なる方向の上記既存領域と交差するマスである交差マスを含む複数のマスから成る領域、および、上記領域内空白マスを含み上記交差マスを含まない複数のマスから成る領域であって、上記第1条件および上記第2条件を満たす限りにおいて最長で取り得る範囲の領域を上記候補領域として抽出することを特徴とする請求項2に記載のクロスワードパズル生成装置。
【請求項7】
上記候補領域選定部が上記交差マスを含まない候補領域を選定して上記対象領域として設定し、当該対象領域に対して上記文字列配置部が文字列を配置した後、上記対象領域設定部の処理および上記文字列配置部の処理が所定回数繰り返し実行された後または全ての行および列に対して上記対象領域設定部の処理および上記文字列配置部の処理が実行された後も、上記交差マスを含まない対象領域に配置された文字列が他の文字列との交差を含まない孤立した状態で残った場合に、当該孤立している文字列を削除し、上記対象領域設定部の処理および上記文字列配置部の処理を再実行する
ことを特徴とする請求項6に記載のクロスワードパズル生成装置。
【請求項8】
上記候補領域選定部は、上記候補領域抽出部により抽出された複数の上記候補領域の中に、上記次文字列自由領域が最大となる上記候補領域が複数ある場合、当該複数の候補領域の中で最も領域長が長い候補領域を上記対象領域として設定することを特徴とする請求項5に記載のクロスワードパズル生成装置。
【請求項9】
上記候補領域選定部は、上記候補領域抽出部により領域長の異なる候補領域が抽出された場合、上記次文字列自由領域が最も広くなるという条件を適用せず、最も領域長が長い候補領域を上記対象領域として設定することを特徴とする請求項5に記載のクロスワードパズル生成装置。
【請求項10】
上記文字列配置部は、上記対象領域設定部により設定された上記対象領域の中に、当該対象領域の領域長以内に収まる任意の文字数の1文字列を文字列辞書から発生確率分布に従ってランダムに抽出して配置することを特徴とする請求項5に記載のクロスワードパズル生成装置。
【請求項11】
上記対象領域設定部および上記文字列配置部は、上記最初の1行目および上記最初の1列目を他の領域に優先して処理し、上記最初の1行目および上記最初の1列目の処理が終わった後に、上記他の領域について上記盤面の縦方向および横方向を交互に切り替えながら、上記対象領域の設定および上記1文字列の配置を繰り返し実行することを特徴とする請求項3または4に記載のクロスワードパズル生成装置。
【請求項12】
上記対象領域設定部および上記文字列配置部は、上記最初の1行目および上記最初の1列目を他の領域に優先して処理し、上記最初の1行目および上記最初の1列目の処理が終わった後に、上記他の領域について上記盤面の縦方向および横方向の切り替えをランダムに行いながら、上記対象領域の設定および上記1文字列の配置を繰り返し実行することを特徴とする請求項3または4に記載のクロスワードパズル生成装置。
【請求項13】
上記対象領域設定部および上記文字列配置部は、上記クロスワードパズルが完成されたときに文字列の配置が行われずに残っているマスを上記黒マスとし、当該黒マスの盤面全体のマス数に占める割合が所定値以上の場合に、上記対象領域の設定および上記1文字列の配置を最初から再実行することを特徴とする請求項10に記載のクロスワードパズル生成装置。
【請求項14】
上記対象領域設定部および上記文字列配置部は、上記クロスワードパズルが完成されたときに文字列の配置が行われずに残っているマスを上記黒マスとし、当該黒マスの盤面全体のマス数に占める割合が所定値以上の場合に、上記対象領域の設定および上記1文字列の配置を最初から再実行することを特徴とする請求項11に記載のクロスワードパズル生成装置。
【請求項15】
縦方向および横方向に任意の数のマス目を有し、文字の入らない黒マスを初期段階において有していない盤面に対し、複数の文字列を縦方向および横方向に配置することによってクロスワードパズルを生成するクロスワードパズル生成方法であって、
コンピュータの対象領域設定部が、任意の文字数の1文字列を配置するための対象領域を上記盤面の中から設定する第1のステップと、
上記コンピュータの文字列配置部が、上記対象領域設定部により設定された上記対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1文字列を配置する第2のステップとを有し、
上記対象領域設定部は、既に文字列が配置された既存領域および上記対象領域を除く残存領域の中で、交差するマスの既存文字による制約および隣接するマスの既存文字による制約を受けずに次の文字列を配置することが可能となる自由領域である次文字列自由領域が最も広くなる位置に上記対象領域を設定し、
上記対象領域設定部による上記第1のステップの処理および上記文字列配置部による上記第2のステップの処理を1文字列ずつ繰り返し実行することによって上記クロスワードパズルを生成するようにした
ことを特徴とするクロスワードパズル生成方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クロスワードパズル生成装置およびクロスワードパズル生成方法に関し、特に、文字の入らない黒マスを初期段階において有していない任意サイズの盤面に対し、複数のワードを縦方向および横方向に配置することによってクロスワードパズルを生成するものに用いて好適なものである。
【背景技術】
【0002】
従来、クロスワードパズルを自動生成する技術が提供されている(例えば、特許文献1参照)。特許文献1には、文字が入らない黒マスの位置があらかじめ決められた所定の盤面において、黒マスの位置を考慮して指定した文字列長の単語を単語辞書から複数選択し、この選択した複数の単語の中から、既に埋められている既存単語と交差するマスにおいて既存単語の文字と一致する文字を有する単語を1つ選択し、選択した単語を指定した文字列位置に配置するという基本的なアルゴリズムが記載されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記特許文献1に記載の技術では、文字が入らない黒マスの位置があらかじめ決められた所定の盤面に対して複数の単語を順次配置していく構成のため、縦方向および横方向のどの文字列位置に何文字の単語を配置すべきかがあらかじめ決まっている。そのため、生成可能なクロスワードパズルの自由度が低いという問題があった。
【0005】
これに対し、黒マスの位置をあらかじめ決めておかない盤面に対して複数の単語を順次配置していくようにすれば、黒マスの拘束を受けずに比較的自由度高く複数の単語を配置していくことが可能である。しかしながら、このように構成した場合、何ら工夫をせずに単純に複数の単語を順次配置していくと、交差する文字や隣接する文字による制限を受けて複数の単語を高密度に配置することができず、最終的に出来上がるクロスワードパズルは黒マスの数が多くなってしまう可能性がある。
【0006】
本発明は、このような問題を解決するために成されたものであり、初期段階において黒マスを有していない任意の大きさの盤面に対してできるだけ高密度に文字列を配置したクロスワードパズルを自由度高く生成できるようにすることを目的とする。
【課題を解決するための手段】
【0007】
上記した課題を解決するために、本発明では、縦方向および横方向に任意の数のマス目を有し、文字の入らない黒マスを初期段階において有していない盤面に対し、複数の文字列を縦方向および横方向に配置することによってクロスワードパズルを生成する。ここで、任意の文字数の1文字列を配置するための対象領域を盤面の中から設定し、設定された対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1文字列を配置するという処理を1文字列ずつ繰り返し実行することによってクロスワードパズルを生成する。対象領域を設定する際は、既に文字列が配置された既存領域および対象領域を除く残存領域の中で、交差するマスの既存文字による制約および隣接するマスの既存文字による制約を受けずに次の文字列を配置することが可能となる自由領域が最も広くなる位置に対象領域を設定するようにしている。
【発明の効果】
【0008】
上記のように構成した本発明によれば、黒マスを初期段階において有していない盤面に対して複数の文字列を順次配置していくので、黒マスの拘束を受けずに任意の文字数の文字列を任意の位置に自由度高く配置していくことが可能である。また、本発明によれば、1文字列を配置する際に、次の文字列を配置する際に交差するマスや隣接するマスの既存文字による制約を受けない自由領域が最も広くなる対象領域を設定してその中に任意長の1文字列を配置するので、次の文字列を自由に配置可能な領域ができるだけ広くなるような余地を残しながら文字列を順次配置していくことが可能であり、そのような広い自由領域に対してより多くの文字列を配置していくことが可能となる。これにより、本発明によれば、任意の大きさの盤面に対してできるだけ高密度に文字列に配置したクロスワードパズルを自由度高く生成することができる。
【図面の簡単な説明】
【0009】
【
図1】本実施形態によるクロスワードパズル生成装置の機能構成例を示すブロック図である。
【
図4】次ワード自由領域の概念を説明するための図である。
【
図5】複数の候補領域およびそれに対応する次ワード自由領域を示す図である。
【
図6】クロスワードパズルを生成する一連の手順を示す図である。
【
図7】クロスワードパズルを生成する一連の手順を示す図である。
【
図8】クロスワードパズルを生成する一連の手順を示す図である。
【
図9】クロスワードパズルを生成する一連の手順を示す図である。
【
図10】クロスワードパズルを生成する一連の手順を示す図である。
【
図11】クロスワードパズルを生成する一連の手順を示す図である。
【
図12】クロスワードパズルを生成する一連の手順を示す図である。
【
図13】候補領域の抽出方法に関する変形例を示す図である。
【
図14】候補領域の抽出方法に関する変形例を示す図である。
【発明を実施するための形態】
【0010】
以下、本発明の一実施形態を図面に基づいて説明する。
図1は、本実施形態によるクロスワードパズル生成装置100の機能構成例を示すブロック図である。
図1に示すように、本実施形態のクロスワードパズル生成装置100は、機能構成として、対象領域設定部1およびワード配置部2を備えている。対象領域設定部1は、より具体的な機能構成として、候補領域抽出部11および候補領域選定部12を備えている。また、本実施形態のクロスワードパズル生成装置100は、記憶媒体としてワード辞書記憶部3を備えている。ワード配置部2は特許請求の範囲の文字列配置部に対応し、ワード辞書記憶部3に記憶されるワード辞書は特許請求の範囲の文字列辞書に対応する。
【0011】
上記機能ブロック1~2は、ハードウェア、DSP(Digital Signal Processor)、ソフトウェアの何れによっても構成することが可能である。例えばソフトウェアによって構成する場合、上記機能ブロック1~2は、実際にはコンピュータのCPU、RAM、ROMなどを備えて構成され、RAMやROM、ハードディスクまたは半導体メモリ等の記憶媒体に記憶されたプログラムが動作することによって実現される。
【0012】
本実施形態のクロスワードパズル生成装置100は、
図2に示すように、縦方向および横方向に任意の数のマス目を有し、文字の入らない黒マスを初期段階において有していない盤面に対し、複数のワードを縦方向および横方向に配置することによってクロスワードパズルを生成するものである。
図2では、縦方向に6マスおよび横方向に6マスから成る6×6の盤面を例示しているが、マス数は任意である。また、縦方向および横方向にマス数をそれぞれユーザが任意に設定できるようにしてもよい。なお、設定可能な最小マス数の制限を設けるようにしてもよい。同様に、設定可能な最大マス数の制限を設けるようにしてもよい。
【0013】
盤面に配置するワードの文字種は、アルファベット、漢字、ひらがな、カタカナの何れかまたはこれらが混合したものであってもよく、その他コンピュータが対応しているあらゆる文字種を適用可能である。また、盤面に配置する文字列は、単語、熟語または文の何れであってもよい。なお、アルファベットの熟語や文の場合は単語間にスペースが存在するが、スペースを所定の代替文字で表現し、当該代替文字を含めて連結した一連の複数文字を1つの文字列として扱う。この場合、代替文字は交差対象外文字として扱う。以下では説明を簡単にするため、文字列として単語(ワード)を用いた場合について説明する。
【0014】
ワード辞書記憶部3には、任意の文字数(ただし、2文字以上)のワードが複数記憶されている。それぞれのワードには、完成されたクロスワードパズルを解くユーザが答えを考える際のヒントを示す文章が紐付けられている。すなわち、ワード辞書記憶部3には、任意の文字数のワードと、そのワードに紐付けられたヒントの文章とが複数セット記憶されている。
【0015】
対象領域設定部1は、任意の文字数の1ワードを配置するための対象領域を盤面の中から設定する。横方向に1ワードを配置する場合、対象領域は横方向の1行の領域である。縦方向に1ワードを配置する場合、対象領域は縦方向の1列の領域である。本実施形態では、自由領域という概念を導入し、この自由領域に関する条件を満たすように対象領域を設定する。自由領域とは、交差するマス(以下、交差マスという)の既存文字による制約および隣接するマス(以下、隣接マスという)の既存文字による制約を受けずにワードを配置することが可能な領域である。
【0016】
ここで、交差マスの既存文字による制約とは、既にワードが配置された既存領域と交差する位置に対象領域を設定すると、交差マスにある既存文字と一致する文字を含むワードを配置しなければならなくなるという制約である。隣接マスの既存文字による制約とは、既にワードが配置された既存領域と隣接する位置に対象領域を設定すると、隣接マスにある既存文字と連結可能なワードを配置しなければならなくなるという制約である。つまり、自由領域とは、上下左右のマスに既存文字が存在しない領域ということになる。
【0017】
図3は、自由領域の概念を説明するための図である。
図3において、●印で示すマスにはワードが配置されおり、それ以外のマスにはワードが配置されていない。この場合、ワードが配置されていない領域のうち、ハッチングした領域が自由領域となる。
【0018】
対象領域設定部1は、既にワードが配置された既存領域および対象領域を除く残存領域の中で、交差マスの既存文字による制約および隣接マスの既存文字による制約を受けずに次のワードを配置することが可能となる自由領域が最も広くなる位置に対象領域を設定する。
【0019】
図4は、「次のワードを配置することが可能となる自由領域」(以下、次ワード自由領域という。次ワード自由領域は、特許請求の範囲の次文字列自由領域に対応する。)を説明するための図である。
図4においても、●印で示すマスにはワードが配置されおり、それ以外のマスにはワードが配置されていない。横長の枠は対象領域を示している。次ワード自由領域とは、対象領域に含まれるマスにも全て文字が存在すると仮定した場合に想定される自由領域である。
図4のように対象領域を設定した場合、ハッチングした領域が次ワード自由領域となる。対象領域設定部1は、このように想定される次ワード自由領域が最も広くなる場所を探してそこに対象領域を設定する。
【0020】
具体的には、対象領域設定部1は、候補領域抽出部11および候補領域選定部12の処理を行うことによって対象領域を設定する。候補領域抽出部11は、対象領域の候補となる候補領域を盤面の中から抽出する。ここで、候補領域抽出部11は、以下に述べる第1条件および第2条件を満たす領域を候補領域として抽出する。第1条件は、領域内で文字が未設定となっている空白マス(以下、領域内空白マスという)から見て領域設定方向とは異なる方向に隣接するマスが全て空白マスとなっていることである。第2条件は、領域内空白マスに文字が配置されることに伴って既存領域に配置済みの既存ワードが変更されないことである。
【0021】
図4に示した例の場合、領域設定方向は横方向(行方向)であり、それとは異なる方向は縦方向(列方向)である。領域内空白マスとは、横長の枠で示した領域に含まれる複数のマスのうち、●印のないマス(文字が存在しないマス)のことをいう。
図4に示す横長の枠は3行目に設定されているので、領域設定方向とは異なる方向に隣接するマスとは、領域内空白マスの上下方向に隣接するマス(2行目と4行目で、2列目から6列目までのマス)である。
図4に示す例の場合、これらのマスは全て空白マスとなっているので、第1条件を満たす。
【0022】
また、
図4に示した例の場合、領域内空白マスの全てに文字が配置されたとしても、既存領域に配置済みの既存ワードが変更されることはない。すなわち、1行目に横方向に配置済みの2つの既存ワードと、1列目に縦方向に配置済みの2つの既存ワードが、領域内空白マス内に配置される文字と連結することによって他のワードに変わってしまうことはない。このため、第2条件を満たす。よって、
図4に示した横長の枠は、候補領域の1つとして抽出される。
【0023】
図5は、候補領域抽出部11により抽出される複数の候補領域CA1,CA2,CA3およびそれに対応する次ワード自由領域FA1,FA2,FA3を示す図である。この
図5は、1行目と1列目に対するワードの配置が終わった後、次のワードを配置する際に抽出される横方向の候補領域を示している。このうち、第1の候補領域CA1は
図4に示したものと同じである。詳しくは解説しないが、第2の候補領域CA2も第3の候補領域CA3も、上述した第1条件および第2条件を満たす領域として抽出される。
【0024】
ここで、候補領域抽出部11は、
図5に示すように、第1条件および第2条件を満たす限りにおいて最長で取り得る範囲を候補領域として抽出する。また、候補領域抽出部11は、盤面の横方向の最初の1行目および縦方向の最初の1列目で交差不可能な状態のとき以外は、領域内空白マスおよび領域設定方向とは異なる方向の既存領域との交差マスを含む複数のマスから成る領域を候補領域として抽出する。
【0025】
図5に示した3つの候補領域CA1~CA3は何れも、2列目から6列目までの5つの領域内空白マスと、1列目に存在する既存領域との交差マスとから成る最長の領域として抽出される。なお、2行目は、第1条件および第2条件を満たすマスが4列目のマス(以下、これを「(2,4)のマス」のように表記することがある)しかなく、2文字以上の領域を設定できない。そのため、2行目からは候補領域が抽出されない。4行目は、2列目から6列目までであれば第1条件および第2条件を満たすが、交差マスが含まれないため、4行目からも候補領域は抽出されない。
【0026】
候補領域選定部12は、候補領域抽出部11により抽出された候補領域の中から、次ワード自由領域が最も広くなる候補領域を選定して対象領域として設定する。
図5には、複数の候補領域CA1,CA2,CA3に対してそれぞれ想定される次ワード自由領域FA1,FA2,FA3がハッチングして示されている。
図5の例では、第3の候補領域CA3に対して想定される次ワード自由領域FA3が最も広くなっている。よって、候補領域選定部12は、第3の候補領域CA3を対象領域として設定する。
【0027】
ここで、次ワード自由領域が最も広くなる候補領域が複数あった場合、候補領域選定部12は、その中から何れかをランダムに選定して対象領域として設定する。あるいは、候補領域選定部12は、次ワード自由領域が最も広くなる候補領域が複数あった場合に、最も領域長が長い候補領域を対象領域として設定するようにし、最も領域長が長い候補領域も複数あった場合に、その中から何れかをランダムに選定するようにしてもよい。あるいは、候補領域選定部12は、候補領域抽出部11により領域長の異なる候補領域が抽出された場合に、次ワード自由領域が最も広くなるという条件を適用せず、最も領域長が長い候補領域を対象領域として設定するようにし、ここで最も領域長が長い候補領域が複数あった場合に、次ワード自由領域が最も広くなる候補領域を対象領域として設定するようにしてもよい。
【0028】
ワード配置部2は、対象領域設定部1(候補領域選定部12)により設定された対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置する。本実施形態では、ワード配置部2は、対象領域設定部1により設定された対象領域の領域長以内に収まる任意の文字数の1ワードを、ワード辞書記憶部3から発生確率分布に従ってランダムに抽出し、抽出した1ワードを対象領域に配置する。「発生確率分布に従う」とは、n文字(n≧2)のワードが抽出される確率が、当該n文字のワードがワード辞書記憶部3に記憶されている数の全数に対する割合に従うという意味である。例えば、2文字のワードが占める割合が30%であれば、2文字のワードが30%の確率で抽出されるということである。
【0029】
本実施形態において、ワード配置部2は、対象領域の領域長および対象領域内に含まれる既存文字を考慮して正規表現式を生成し、この正規表現式を満たす1ワードをワード辞書記憶部3から抽出して対象領域に配置する。正規表現式の詳細については後述する。
【0030】
本実施形態において、対象領域設定部1およびワード配置部2は、1行目および1列目を他の領域に優先して処理し、その処理が終わった後に、他の領域について盤面の縦方向および横方向を交互に切り替えながら、対象領域の設定および1ワードの配置を繰り返し実行することによってクロスワードパズルを生成する。最初の1行目および最初の1列目については例外的に、可能な限り連続して対象領域の設定および1ワードの配置を行う。
【0031】
ここで、対象領域設定部1は、最初の1行目および最初の1列目については例外的に、次ワード自由領域が最も広くなるという条件を適用せず、候補領域の抽出もせずに、第2条件を満たす領域を対象領域として設定する。そして、ワード配置部2は、対象領域設定部1により設定された対象領域に対して任意の文字数の1ワードを配置する。これを、1ワードの配置ごとに1行目と1列目とを交互に切り替えて行うのではなく、1行目において可能な限り連続して対象領域の設定および1ワードの配置を行った後、1列目において可能な限り連続して対象領域の設定および1ワードの配置を行う。
【0032】
すなわち、最初の1行目において、当該1行目内の自由領域(次ワード自由領域ではない)が枯渇するまで対象領域の設定とワードの配置を連続して行う。最初の1列目においても同様に、1列目内の自由領域が枯渇するまで対象領域の設定とワードの配置を連続して行う。なお、最初の1行目および最初の1列目を他の領域に優先して処理する限りにおいて、1行目の処理と1列目の処理とをそれぞれの自由領域が枯渇するまで交互に切り替えながら行ってもよい。
【0033】
図6~
図12は、以上のように構成した本実施形態のクロスワードパズル生成装置100によりクロスワードパズルを生成する一連の手順を示す図である。これらの図には、クロスワードパズルの盤面の下に、ワード配置部2が1ワードを配置するときに生成する正規表現式を併せて示している。
図6~
図12では一例として、アルファベットのワードを順次配置することによってクロスワードパズルを生成する手順を示している。
【0034】
まず、
図6(a)に示すように、対象領域設定部1が1行目に6マスの最長領域を対象領域として設定し、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置する。このときワード配置部2が生成する正規表現式は“^[A-Z]{0,6}$”である。この正規表現式において、先頭の“^”は、この記号の直後の文字が文字列の先頭であることを意味する。“[A-Z]”の部分は、角括弧に含まれるいずれか1文字を抽出することを意味する。“{0,6}”の部分は、抽出する文字の最小桁数と最大桁数とを指定したものである。この場合、0文字以上6文字以下のワードを抽出することを意味する。最後尾の“$”は、この記号の直前の文字が文字列の末尾であることを意味する。
図6(a)は、“^[A-Z]{0,6}$”に合致するワードとして、3文字の“APA”がワード辞書記憶部3から発生確率分布に従ってランダムに抽出されて配置された例を示している。
【0035】
次に、
図6(b)に示すように、対象領域設定部1が最初と同じ1行目に対し、第2条件を満たして既存ワードと連結しない範囲で最長となる2マスの領域を対象領域として設定する。そして、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる2文字の1ワードを配置する。このときワード配置部2が生成する正規表現式は“^[A-Z]{0,2}$”である。
図6(b)は、“^[A-Z]{0,2}$”に合致するワードとして、2文字の“US”がワード辞書記憶部3からランダムに抽出されて配置された例を示している。
【0036】
次に、
図6(c)に示すように、対象領域設定部1が1列目に6マスの最長領域を対象領域として設定し、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置する。このときワード配置部2が生成する正規表現式は“^A[A-Z]{0,5}$”である。
図6(c)の場合、(1,1)のマスに配置された“A”の文字と語頭において連結するワードを抽出するために、正規表現式の先頭に“^A”を挿入している。
図6(c)は、“^A[A-Z]{0,5}$”に合致するワードとして、3文字の“AIM”がワード辞書記憶部3から発生確率分布に従ってランダムに抽出されて配置された例を示している。
【0037】
次に、
図6(d)に示すように、対象領域設定部1が直前と同じ1列目に対し、既存ワードと連結しない範囲で最長となる2マスの領域を対象領域として設定する。そして、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる2文字の1ワードを配置する。このときワード配置部2が生成する正規表現式は“^[A-Z]{0,2}$”である。
図6(d)は、“^[A-Z]{0,2}$”に合致するワードとして、2文字の“IT”がワード辞書記憶部3からランダムに抽出されて配置された例を示している。
【0038】
次に、
図7に示すように、対象領域設定部1が3つの横方向の候補領域CA1~CA3を抽出し、その中から次ワード自由領域が最も広くなる第3の候補領域CA3を対象領域として設定する。そして、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置する。このときワード配置部2が生成する正規表現式は“^T[A-Z]{0,5}$”である。
図7は、“^T[A-Z]{0,5}$”に合致するワードとして、3文字の“TCP”がワード辞書記憶部3から発生確率分布に従ってランダムに抽出されて配置された例を示している。
【0039】
次に、
図8に示すように、対象領域設定部1が3つの縦方向の候補領域CA1~CA3を抽出し、その中から次ワード自由領域が最も広くなる第1の候補領域CA1を対象領域として設定する。そして、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置する。
図8は、最初に“^A[A-Z]{4}P$”という正規表現式を生成し、1文字目が“A”、2~4文字目がそれぞれ“A”~“Z”の任意の文字、6文字目が“P”から成るワードをワード辞書記憶部3において探索したが見つからず、“^A[A-Z]{0,3}$”という正規表現式を生成して探索し直した結果、1文字目が“A”から成る4文字の“ABLE”がワード辞書記憶部3から発生確率分布に従ってランダムに抽出されて配置された例を示している。
【0040】
なお、1文字目が“A”のワードが全く見つからなかった場合は、“^[A-Z]{0,3}P$”という正規表現式を生成することにより、4文字以内で末尾が“P”のワードを探索し直す。ここで、4文字以内で末尾が“P”のワードも全く見つからなかった場合は、次ワード自由領域が2番目に広くなる第3の候補領域CA3を対象領域として設定し直した後、その対象領域に対して任意の文字数の1ワードを配置する。
【0041】
次に、
図9に示すように、対象領域設定部1が2つの横方向の候補領域CA1,CA2を抽出し、その中から次ワード自由領域が最も広くなる第1の候補領域CA1を対象領域として設定する。そして、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置する。この
図9に示す段階では、(4,3)のマスに既存文字があるため、4行目において最長で取り得る5マスの領域が第2の候補領域CA2として抽出されている。ただし、次ワード自由領域が最も広くなる第1の候補領域CA1が対象領域として設定されている。
【0042】
図9は、対象領域として設定された第1の候補領域CA1に対し、最初に“^M[A-Z]{1}L[A-Z]{0,3}$”という正規表現式を生成し、1文字目が“M”で3文字目が“L”のワードをワード辞書記憶部3において探索したが見つからず、“^L[A-Z]{0,3}$”という正規表現式を生成して探索し直した結果、3文字の“LEG”がワード辞書記憶部3から発生確率分布に従ってランダムに抽出されて配置された例を示している。
【0043】
次に、
図10に示すように、対象領域設定部1が2つの縦方向の候補領域CA1,CA2を抽出し、その中から第1の候補領域CA1を対象領域として設定する。そして、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置する。この
図10は、抽出された2つの候補領域CA1,CA2の領域長の差が大きいため、次ワード自由領域が最も広くなるという条件を適用せずに、最も領域長が長い第1の候補領域CA1を対象領域として設定した例を示している。
図10は、“^U[A-Z]{1}G[A-Z]{0,3}$”という正規表現式に合致するワードとして、6文字の“URGENT”がワード辞書記憶部3から発生確率分布に従ってランダムに抽出されて配置された例を示している。
【0044】
次に、
図11に示すように、対象領域設定部1が3つの横方向の候補領域CA1~CA3を抽出し、その中から第3の候補領域CA3を対象領域として設定する。そして、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置する。この
図11では、どの候補領域CA1~CA3についても次ワード自由領域が存在しないため、最も領域長が長い第3の候補領域CA3が対象領域として設定される。
図11は、“^[A-Z]{0,1}N[A-Z]{0,1}$”という正規表現式に合致するワードとして、3文字の“END”がワード辞書記憶部3から発生確率分布に従ってランダムに抽出されて配置された例を示している。
【0045】
なお、
図11では、領域設定方向に対する盤面の一端から他端までの全マスを含む最大領域が候補領域として抽出されていない。この場合、候補領域の中から設定された対象領域に対してワードを配置した段階でクロスワードパズルの完成としてもよい。ただし、より高い密度でワードを配置するために、最大領域が候補領域として抽出されていなくても、候補領域が存在する限り、対象領域の設定およびワードの配置を継続して実行するのが好ましい。
【0046】
次に示す
図12は、
図11に示す横方向に対するワードの配置後、縦方向に対して候補領域の抽出を試みたが抽出できず、更にその後、横方向に対して候補領域の抽出を試みた結果、1つの横方向の候補領域CAが抽出された状態を示している。この場合、対象領域設定部1はその抽出した候補領域CAを対象領域として設定する。そして、ワード配置部2がその対象領域に対し、当該対象領域の領域長以内に収まる2文字の1ワードを配置する。
図12(a)は、“^[A-Z]{0,1}E$”という正規表現式に合致するワードとして、2文字の“SE”がワード辞書記憶部3からランダムに抽出されて配置された例を示している。
【0047】
なお、何れか一方の領域設定方向について候補領域が1つも抽出されなかった段階でクロスワードパズルの完成としてもよい。ただし、より高い密度でワードを配置するために、
図12(a)に示すように他方の領域設定方向について候補領域の抽出を更に行うようにするのが好ましい。他方の領域設定方向についても候補領域が1つも抽出されなかった段階で、クロスワードパズルの完成とすればよい。
【0048】
図12(a)のように2文字の“SE”を配置した後、縦方向および横方向に対して候補領域の抽出を試みても抽出されない。そこで、
図12(b)に示すように、
図12(a)の段階でワードの配置が行われずに残っているマスを黒マスとし、クロスワードパズルの完成とする。
【0049】
以上詳しく説明したように、本実施形態では、縦方向および横方向に任意の数のマス目を有し、文字の入らない黒マスを初期段階において有していない盤面に対し、複数のワードを縦方向および横方向に配置することによってクロスワードパズルを生成する。ここで、任意の文字数の1ワードを配置するための対象領域を盤面の中から設定し、設定された対象領域に対し、当該対象領域の領域長以内に収まる任意の文字数の1ワードを配置するという処理を1ワードずつ繰り返し実行することによってクロスワードパズルを生成する。対象領域を設定する際は、既にワードが配置された既存領域および対象領域を除く残存領域の中で、次ワード自由領域が最も広くなる位置に対象領域を設定するようにしている。
【0050】
このように構成した本実施形態によれば、初期段階において黒マスを有していない盤面に対して複数のワードを順次配置していくので、黒マスの拘束を受けずに任意の文字数のワードを任意の位置に自由度高く配置していくことが可能である。また、本実施形態によれば、1ワードを配置する際に、次ワード自由領域が最も広くなる対象領域を設定してその中に任意長の1ワードを配置するので、次のワードを自由に配置可能な領域ができるだけ広くなるような余地を残しながらワードを順次配置していくことが可能であり、そのような広い自由領域に対してより多くのワードを配置していくことが可能となる。これにより、本実施形態によれば、任意の大きさの盤面に対してできるだけ高密度にワードを配置したクロスワードパズルを自由度高く生成することができる。
【0051】
また、本実施形態では、最初の1行目および最初の1列目を他の領域に優先して処理するようにし、1行目と1列目では自由領域が枯渇するまで対象領域の設定とワードの配置を行うようにしている。このため、1行目および1列目の処理が終わった後の他の領域における処理において、交差マスを含む領域として抽出され得る候補領域の数ができるだけ多くなるようにすることが可能であり、多くの候補領域の中から次ワード自由領域が最も広くなる候補領域を対象領域として設定することができる。これにより、より適切な位置に対象領域を設定できる可能性が高くなる。
【0052】
また、本実施形態では、第1条件および第2条件を満たす限りにおいて最長で取り得る範囲を候補領域として抽出するようにしているので、より文字数の多いワードを配置することが可能なように対象領域を設定することが可能である。これにより、最終的にワードの配置が行われずに残る黒マスの数を極力減らし、より高密度にワードを配置したクロスワードパズルを生成することができる。
【0053】
さらに、本実施形態では、設定した対象領域の中に領域長と同じ長さのワードを配置するのではなく、ワード辞書記憶部3から発生確率分布に従ってランダムに抽出したワードを配置するようにしている。このため、設定した対象領域の領域長よりも短い長さのワードが配置されることもあり、別のワードを更に配置することが可能な余地を残すことが可能である。これにより、より多くの数のワードを配置したクロスワードパズルを生成することができる。
【0054】
なお、上記実施形態では、最初の1行目および最初の1列目を他の領域に優先して処理した後に、他の領域について盤面の縦方向および横方向を交互に切り替えながら対象領域の設定および1ワードの配置を繰り返し実行する例について説明したが、本発明はこれに限定されない。例えば、最初の1行目および最初の1列目を他の領域に優先して処理した後に、他の領域について盤面の縦方向および横方向の切り替えをランダムに行いながら対象領域の設定および1ワードの配置を繰り返し実行するようにしてもよい。切り替えをランダムに行う方法の一例として、
図13に示すように、縦方向および横方向の両方について一度に候補領域CA1~CA5を抽出し、その中から次ワード自由領域が最も広くなる候補領域を対象領域として設定するようにしてもよい。
【0055】
また、上記実施形態では、最初の1行目および最初の1列目については、次ワード自由領域が最も広くなるという条件を適用せずに、第2条件だけで対象領域を設定する例について説明したが、本発明はこれに限定されない。例えば最初の1行目および最初の1列目についても他の領域と同様に、候補領域を抽出し、次ワード自由領域が最も広くなるという条件を適用して対象領域を設定するようにしてもよい。このようにしても、次ワード自由領域が最も広くなるという条件を適用せずに対象領域を設定した場合と結果は同じとなる。
【0056】
また、上記実施形態において、1行目および1列目を他の領域に優先して処理した際に、2つ以上の連続した空白マスが生じる場合に、対象領域の設定およびワードの配置を再度実行するようにしてもよい。
【0057】
また、上記実施形態では、1行目および1列目を他の領域に優先して処理する例について説明したが、本発明はこれに限定されない。例えば、1行目および1列目に加え、一番下の行および一番右の列も他の領域に優先して処理するようにしてもよい。
【0058】
また、上記実施形態において、第1条件および第2条件に従って抽出可能な候補領域が枯渇したときにクロスワードパズルの完成とする例について説明したが、本発明はこれに限定されない。例えば、対象領域設定部1およびワード配置部2は、クロスワードパズルが完成されたときにワードの配置が行われずに残っている黒マスの盤面全体のマス数に占める割合が所定値以上の場合に、対象領域の設定および1ワードの配置を最初から再実行し、黒マスの盤面全体のマス数に占める割合が所定値未満となったときにクロスワードパズルの完成とするようにしてもよい。
【0059】
あるいは、第1条件および第2条件に従って抽出可能な候補領域が枯渇したときに、
図14に示すように、第1条件を緩和し、領域内空白マスから見て領域設定方向とは異なる方向に隣接するマスが1つだけ空白マスとなっていないことを許容して候補領域を更に抽出するようにしてもよい。この時点で次ワード自由領域は完全に枯渇しているので、抽出した候補領域からランダムに対象領域を設定してワードを配置する。この場合、領域設定方向に対して正規表現式を生成することに加え、隣接マスに既存文字があるところにおいて領域設定方向とは異なる方向に対して正規表現式を生成し、両方の正規表現式を満たすワードをワード辞書記憶部3から抽出する。これを、候補領域を完全に抽出できなくなるまで繰り返す。このようにすれば、最終的にワードの配置が行われずに残る黒マスの数を極力減らし、かつ、よりより多くの数のワードを配置したクロスワードパズルを生成することができる。
【0060】
また、上記実施形態では、候補領域抽出部11により領域長の異なる候補領域が抽出された場合に、最も領域長が長い候補領域を対象領域として設定する例について説明したが、これとは逆に、最も領域長が短い候補領域を対象領域として設定するようにしてもよい。この場合、短い文字数のワードが配置されることになるため、全体としてより多くの数のワードが盤面に配置される可能性を高めることができる。
【0061】
また、上記実施形態では、領域内空白マスおよび既存領域との交差マスを含む複数のマスから成る領域を候補領域として抽出する例について説明したが、本発明はこれに限定されない。例えば、交差マスを含む領域に加え、交差マスを含まない領域を候補領域として抽出するようにしてもよい。例えば、
図5に示す状況において、第1条件および第2条件を満たす4行目の2列目から6列目までの領域も候補領域の1つとして抽出するようにしてもよい。
【0062】
交差マスを含まない候補領域を対象領域に設定して1ワードを配置した場合でも、この対象領域に配置されたワードと交差するワードが次回以降で配置される可能性がある。なお、交差マスを含まない候補領域を対象領域に設定してワードを配置した後、当該ワードと交差するワードが配置されず孤立した状態が所定回数続いた場合に、当該孤立しているワードを削除するようにしてもよい。あるいは、交差マスを含まない候補領域を対象領域に設定して配置したワードが、その後の全ての行および列に対するワードの配置後にも他のワードとの交差を含まない孤立した状態で残った場合に、当該孤立しているワードを削除し、候補領域の抽出から対象領域設定部1およびワード配置部2の処理を再試行するようにしてもよい。
【0063】
なお、交差マスを含む領域と交差マスを含まない領域との両方が候補領域として抽出され得る場合、次ワード自由領域の広さによらず、交差マスを含む候補領域を優先して対象領域として設定するようにしてもよい。
【0064】
その他、上記実施形態は、何れも本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその要旨、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【0065】
1 対象領域設定部
2 ワード配置部(文字列配置部)
3 ワード辞書記憶部(文字列辞書)
11 候補領域抽出部
12 候補領域選定部
100 クロスワードパズル生成装置