第1講 序章(数独自動生成を実現するための課題)
第2話 数独生成のための実際的な手順
実際的な手順は以下のようにします。
Ⅰ.問題作成
Ⅱ.問題を解く
または、
①.問題を解く
②.解答から問題を作成する
という手順をとります。
ⅠⅡの手順はわかるけど、
①②の手順は意味がわからないとお思いになる方もいらっしゃるでしょう。
ですが、ヒント数によってはⅠⅡの手順を踏んだ方がよい場合と、
①②の手順を踏んだ方がよい場合があるわけです。
私の研究では、
ヒント数が27以下であればⅠⅡの手順で、
28以上であれば①②の手順で自動生成させた方が、
素早く問題を生成できるのです。
私は自分で数独を作れるほど頭がよくありませんから、
手では作ったことはありませんが、
手作業で作っている方はおそらくⅠⅡの手順を踏んでいるし、
数独自動生成ソフトでもⅠⅡの手順が自然であるとお感じになるでしょう。
ところが、ヒント数が多い問題はⅠⅡの手順で生成させるのは難しいのです。
難しい理由は第1話で述べた
ⅱ.解が存在する
ⅲ.別解が存在しない
いずれかに理由があります。
どちらだと思いますか。20行下に回答
ⅲ.が答えです。
問題作成段階で、
いかなる行・列・ブロックにおいても数字を重複させてはならない
と言う条件下の基に数字を配置しても、
ヒント数が30を超えるとほとんどが解なしの問題になってしまうのです。
解なしの問題をクリアするために
「①.問題を解い」てから「②.解答から問題を作成」するわけです。
解いてあるので、答えは当然存在します。
解のない問題は解けないですから。
逆にヒント数が少ない問題では
Ⅰ.問題作成
Ⅱ.問題を解く
の手順を踏んだ方が、
問題が早く自動生成できる理由は、
解が存在しない可能性が低くなるからです。
でも、皆さんの頭の中には、
「①.問題を解い」てから「②.解答から問題を作成」する
とはどういうことかという疑問が残っていますよね。
まだ、説明していないから当然です。
「①.問題を解く」とはヒント数0の数独を解くことです。
当然ヒント数0の数独の解答は無数と思えるほどあります。
もちろん複数解があるものは数独とは言えず疑似数独ですが、
便宜上今後の記述では、疑似を入れずに数独とします。
数独解答数は今の段階でははっきりわかっていませんが、
ある数学者の研究では約55億と推定されています。
これは、対称移動や鏡面移動させて同じになるものを1つと数えていますし、
1から9までの順列を区別しない場合ですから、
実際には数独の解答数は
55億×8×9!=約1.6×10の16乗個存在すると推測することが出来ます。
ですから、
月刊誌や新聞等で掲載され続けても問題が作れなくなる可能性はほぼないのです。
とにかくヒントになる数字が
まったく配置されていない段階で数独を解かせて、
そこから、別解のない問題を作らせるのです。
配置数が多い場合には、別解が出来る可能性は薄いので、
解答さえ作っておけば、容易に数独が作成できるのです。
でもヒント数0の問題を解くのは難しいのでは?
こう思うのは理解できます。
一般的にはヒント数が少ない問題の方が難しいからです。
ところが答えは、「大変簡単だ」です。
コンピュータは0.00066(実際には0.0001)秒程度で解いてしまいます。
もちろん無数に近い別解があるのですから、
理詰めでは解けません。
理詰めで解ける必要条件は、唯一解であることですから。
では、どうやって解かせるのでしょうか。
答えの気になる方は次話をクリックして下さい。
ところで、
数独自動生成新方式アプリ(ハイブリッド方式)Ver.3
数独自動生成新方式アプリ(ハイブリッド方式)Ver.4
数独自動生成新方式アプリ(ハイブリッド方式)Ver.5
(以上エクセル2016のVBAで開発したソフト
C++によってマルチスレッド版にしたものはすでに紹介してあります。
マルチスレッド版数独自動生成ソフトです。まだ体験されていない方は
点線にはさんである部分をお読みになって開発する数独自動生成ソフトを体験してください。)
皆様にお詫び申し上げます。
2023年9月4日以前のものは、仮定法を使わないと解けない問題を生成していました。
それで大変申し訳ないのですが、
点線にはさんである部分をお読みになって下記の手順をやり直してください。
-----------------------------------------------------
本講座で開発するソフトの体験の仕方
マルチスレッド版数独自動生成ソフト
上の『マルチスレッド版数独自動生成ソフト』をクリックします。
次に、
タスクバーのをクリックして
エクスプローラーを起動して
ダウンロードをダブルクリックします。
すると、sudokuという圧縮ファイルが出てきます。
sudoku右クリックして、
すべて展開をクリックします。
赤い囲いのところをC:\sudokuに変更して
展開をクリックします。
すると圧縮ファイルが解凍され、sudokuというフォルダがC:\上に展開されます。
すべてブロックされていますので、以下の手順でブロックを外します。
20をダブルクリック
実行しないをクリック
20のところで右クリック
プロパティをクリック
許可するにチェックマークを入れます。
OKをクリックします。
これでブロックが外れます。
確認のために20をダブルクリックします。
黒い画面が立ち上がればブロックが外されていますので、×をクリックして閉じます。
赤枠の21以下について同様の作業をします。
24あたりになると黒い画面は自動的に閉じられてしまうでしょうが、
黒い画面が立ち上がった時点でブロックは外されていますので問題はありません。
最後のsudokuについてはダブルクリックすると
の画面が現れます。編集を有効にするを押してから
×によって閉じてください。
そして、を右クリックしプロパティをクリックして、
許可するにチェックマークをいれてからOKしてください。
念のためにをもう一度ダブルクリックして
実行ボタンをクリックして数独ができればブロックが外されたことが確認できます。
最後にデスクトップにショートカットを作っておくことをお勧めします。
デスクトップ上で右クリック→新規作成→ショートカットの順に進み
項目の場所をC:\sudoku\sudoku.xlsmとして次へをクリックして
ショートカットの名前を数独自動生成ソフトなどとして完了ボタンを押せば、
デスクトップに数独自動生成ソフトのショートカットができて、
それをダブルクリックによって、
ソフトが起動します。
ヒント数を入力して実行ボタンを押すと
数独が生成されます。
このソフトは100%理詰めで解ける数独を生成しますので
数独を楽しんでください。
-----------------------------------------------------
においてはヒント数0の問題ではなくヒント数26を解かせてから、
問題を作成させています。
ある程度ヒント数がある問題を解いてから、
問題を作成する方が良問が出来ると考えているからですが、
本当であるかどうかはまだ検証していませんので、
この講義において検証もしてみたいと思っています。
第1話へ 第3話へ