「Balda」(記事)がTSQLで問題なく解決された後、私はその上で「数独」を解決しようとすることにしました(
shavlukのアイデアに感謝し
ます )。
数独のソリューションは、驚くほど簡単であることが判明しました。
基本的なスキームは次のとおりです。
テーブルの説明:- SudokuCell-すべてのセルのプロパティ(領域、行、列)の説明。
- SudokuValue-有効なセル値。
- SudokuField-既知の数値を設定するためのフィールド。
テーブルを作成するためのスクリプト:
次のように、既知の番号をフィールドに入力します。
セル識別子(CellID)は次のように構築されます。
- 番号の1桁目と2桁目-どの地域(行、列)であるかを示します。
- 3番目と4番目の数字は、領域内の行と列の番号です。
私は次のサイト
リンクから最初の塗りつぶしオプションを取りました。
フィールドがどのように見えるか見てみましょう:
次に、コメント付きのソリューション検索アルゴリズムがあります。
見つかった解決策を見てみましょう。
ソリューションの他の例:
次のスクリプトを使用して、初期値を設定しました。
私のコンピューターでは、解決策は6秒以内です(指定された初期値による):- 例1:4.547秒
- 例2:5.317秒
- 例3:3.690秒
実際には、それだけです。完全なスクリプトは、次のリンク(
スクリプト)からダウンロードでき
ます 。
記事が面白かったと思います。
頑張って、あなたの注意をありがとう!
PS(2015年12月4日)
MS SQLで
Oracleクエリを書き直しました。
WITH x AS( SELECT s, CHARINDEX(' ',s) ind
Oracleクエリの表示... with x( s, ind ) as ( select sud, instr( sud, ' ' )
私のコンピューターでは、MS SQLは実行時間でOracleよりもはるかに進んでいます。- 例1:Oracle-1.079秒、MS SQL-0.303秒
- 例2:Oracle-2.991秒、MS SQL-0.787秒
- 例3:Oracle-3.037秒、MS SQL-0.773秒
Oracleバージョン-11g Enterprise Editionリリース11.2.0.1.0-64ビット製品版
MS SQLバージョン2014-12.0.2269.0(X64)Developer Edition(64ビット)