ランダム数独ジェネレータ


13

完全にランダムな数独を生成したい。

数独グリッドの定義間の整数のグリッドといくつかの要素を省略することができます。グリッドは、数独の制約(各行、列、整列された正方形に繰り返し要素がない)に一致する独自の方法があれば有効なパズルであり、その点で最小です(つまり、これ以上省略した場合)要素にはパズルに複数の解決策があります)。9×9193×3

すべての数独パズルが同等になるように、ランダムな数独パズルを生成するにはどうすればよいですか?


実行可能な解決策のようなこのルックス:dryicons.com/blog/2009/08/14/...
ジョー・

1
これに関するメタ質問があります。そこで、またはチャットで議論してください。
ケビン

回答:


15

すべての数独パズルの正確な均一分布の生成は、そのようにして行うことができます。9x9グリッドをランダムに生成し、それが正しい数独グリッドである場合にのみ保持し、そうでない場合は再試行します。

このブルートフォースアプローチは、均一な分布を保証しますが、ランダムな8x8グリッドを生成し、残りの2行を埋めるだけで、グリッドが正しい確率を倍にすることができるため、明らかに効率的ではありません。これはまだランダムな分布ですが、それでも非効率的です。917

あなたがまたあることを最初の行を強制することができます、グリッドの残りをランダムに生成し、すべての数字の順列をランダムに選択します。それでも同じ確率ですべてのグリッドを選択しますが、9 もっと早く。[129]9

多分あなたは私がどこに向かっているのかを見るでしょう:この問題に賢明な方法で答えると、おそらく数独グリッドの基礎となる対称性について疑問に思うでしょう。多くの作業は、17数独の手がかりの最小数(であるという事実を証明するために、この方向で行われたこの記事を参照してください)、あなたが行くことができ、ここでこれらを使用しています3359232の類似したグリッドの5472730538クラスのこの正確な列挙を、見ることを対称性:

  1. 数字の順列
  2. 行の順列(バンドと各バンド内の行)
  3. 列についても同じこと
  4. 転置

このフレームワークを使用すると、5,472,730,538クラス(実際には6 GBに圧縮できます)の1つをランダムに選択し、各対称性の代表( 1つ)を選択できます!6 46 42964642

編集:これを不完全なパズルに適合させるために、グリッドのサブセットをランダムに選択し、解が数独ソルバーと一意であるかどうかを確認し、そうでない場合は再試行できます。ユニークなソリューションを備えた不完全なパズルの数は2つのグリッドで異なる可能性があるため、これは均一な分布ではありません。(そうでなければ私は非常に驚くでしょう)


しかし、ジャスティンは、パズルを完成させるユニークな方法があるように、不完全なパズルを生成する方法を求めています。数独の制約を満たす9x9グリッドを生成したとしても、セルの特定のサブセットを削除すると、独自の方法で完成できるパズルが得られる理由は明らかではありません。
ジャノマ

1
@ジャノマ:ああ、私の悪い、編集します。しかし、適切なパズルが何であるかを定義しないと、あまり意味がありません。(空のセルが1つだけのグリッドはパズルですか?)。最小のグリッドが必要ですか(つまり、数字を削除すると、解は一意ではなくなりますか?)、それは興味深い質問です。
-jmad

「一部の要素は省略可能」で十分です(「1つ以上の」要素を削除できます)。たとえば、空のセル 1つある有効なパズルは独自の方法で完成できますが、空のパズルは複数の有効なパズルがあるため完成できません。また、完成した有効なパズルは、ユニークな(些細な、空の)方法で完成させることができます。最小グリッドに関する質問も興味深いですが、これとは異なります。
ジャノマ

@ Janoma、jmad:有効なパズルは通常最小限であることに言及し忘れました。
ジル「SO-悪であるのをやめる」

@Gillesそれは定義ですか?それが本当にOPの意図した意味なのだろうか。問題がさらに難しくなります:
ジャノマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.