Puzzle 生成
GNPX には、数独パズルを生成する 2 つの方法があります。
(1) Puzzle 手動生成
マニュアルで、数独の問題を左の9x9の升目に作る。
- 最初に、頭の中で、入力する数字を強くイメージする。
- 9x9のセルをクリックすると、セルにイメージした数字が表れる。
- もしも、イメージしたのと異なる数字が現れたときは、あなたのイメージパワーが弱かったからです。
その場合は、再度、強く強くイメージしてクリックする。これは何度でも試行できます。 - 入力済み数字を取り消すときは、"消えろ"と強く念じながら、その数字を再度クリックする。
(2) Puzzle 自動生成
GNPXで採用している 数独 Puzzle の生成方法 の解説です。
v6では、次の手順で 数独 Puzzle を生成します。基本的な生成手法は開発済みですが、ハンドリングは改良の余地があります。
- ステップ-1. ラテン方陣を生成する [parallel可能]
ラテン方陣の生成方法は、
Latin Square にあります。
最初に ブロック1は固定します。
ブロック2,3 は、パラメータで制御します。この ブロック2,3 パラメータは 2,612,736 種類あります。
ブロック4,7 パラメータにも 2,612,736 種類あります。
[2,3 パラメータ] × [4,7 パラメータ] の1組について、 2,000~5,000 の ラテン方陣が生成できます。
ランダムに 500~1,000組のパラメータを選び、ラテン方陣セットを生成します。
- ステップ-2. ラテン方陣に Puzzle パターンを重ねる
ステップ-1 で生成した ラテン方陣 は全て異なります。
これにPuzzle パターンを重ねて、パターンが空白セルを'0'に置き換えます。これを '前Puzzle' とします。
パターン を重ねた 前Puzzle は、多数の同一のものが生じます。前Puzzle セットから、ユニークなもののみを選びます。
ユニークでないパターンは、数独の問題として唯一解を持ちません。
なお、ユニークなパターンも '唯一解を持つ=数独の問題'であることは保証されません。
- ステップ-3. ユニークな 前Puzzle セットを TryAndError 法で解く [parallel可能]
TryAndError は 高速 に ラテン方陣を解きます。
TryAndError でユニークな解をもつ 前Puzzle は、数独の問題の候補です。
ここでも、'数独の問題'であることは保証されません。ステップ-1 の他のパラメータから生成される ラテン方陣 が同じ場合があることに因ります。
- ステップ-4. 数独アルゴリズムで解く [parallel可能]
ステップ-3 の 数独の問題の候補 を 数独アルゴリズム で解きます。
ステップ-1~3 と ステップ-4 は それぞれ独立に(別スレッドで)実行できます。
GNPXでは、数独アルゴリズムスレッドは 常に動作状態にし、
ステップ-1~3 で 数独Puzzle の候補が求まるごとに 数独アルゴリズムスレッドに送ります(Queue使用)。