第1講 序章(数独自動生成を実現するための課題)
第2話 数独生成のための実際的な手順
実際的な手順は以下のようにします。
Ⅰ.問題作成
Ⅱ.問題を解く
または、
①.問題を解く
②.解答から問題を作成する
という手順をとります。
ⅠⅡの手順はわかるけど、①②の手順は意味がわからないとお思いになる方もいらっしゃるでしょう。
ですが、ヒント数によってはⅠⅡの手順を踏んだ方がよい場合と、
①②の手順を踏んだ方がよい場合があるわけです。
私の研究では、ヒント数が27以下であればⅠⅡの手順で、
28以上であれば①②の手順で自動生成させた方が、
素早く問題を生成できるのです。
私は自分で数独を作れるほど頭がよくありませんから、
手では作ったことはありませんが、
手作業で作っている方はおそらくⅠⅡの手順を踏んでいるし、
数独自動生成ソフトでもⅠⅡの手順が自然であるとお感じになるでしょう。
ところが、ヒント数が多い問題はⅠⅡの手順で生成させるのは難しいのです。
難しい理由は第1話で述べた
ⅱ.解が存在する
ⅲ.別解が存在しない
いずれかに理由があります。
どちらだと思いますか。
正解はⅱです。
ⅰ.問題作成段階で、いかなる行・列・ブロックにおいても数字を重複させてはならない
と言う条件下の基に数字を配置しても、
ヒント数が30を超えるとほとんどが解なしの問題になってしまうのです。
解なしの問題をクリアするために
「①.問題を解い」てから「②.解答から問題を作成」するわけです。
解いてあるので、答えは当然存在します。
解のない問題は解けないですから。
逆にヒント数が少ない問題では
Ⅰ.問題作成
Ⅱ.問題を解く
の手順を踏んだ方が、問題が早く自動生成できる理由は、
解が存在しない可能性が低くなるからです。
でも、皆さんの頭の中には、
「①.問題を解い」てから「②.解答から問題を作成」する
とはどういうことかという疑問が残っていますよね。
まだ、説明していないから当然です。
「①.問題を解く」とはヒント数0の数独を解くことです。
当然ヒント数0の数独の解答は無数と思えるほどあります。
もちろん複数解があるものは数独とは言えず疑似数独ですが、
便宜上今後の記述では、疑似を入れずに数独とします。
数独解答数は今の段階でははっきりわかっていませんが、
ある数学者の研究では約55億と推定されています。
これは、対称移動や鏡面移動させて同じになるものを1つと数えていますし、
1から9までの順列を区別しない場合ですから、
実際には数独の解答数は
55億×8×9!=約1.6×10の16乗個存在すると推測することが出来ます。
ですから、月刊誌や新聞等で掲載され続けても問題が作れなくなる可能性はほぼないのです。
とにかくヒントになる数字がまったく配置されていない段階で数独を解かせて、
そこから、別解のない問題を作らせるのです。
配置数が多い場合には、別解が出来る可能性は薄いので、
解答さえ作っておけば、容易に数独が作成できるのです。
でもヒント数0の問題を解くのは難しいのでは?
こう思うのは理解できます。
一般的にはヒント数が少ない問題の方が難しいからです。
ところが答えは、「大変簡単だ」です。
コンピュータは0.00066秒程度で解いてしまいます。
もちろん無数に近い別解があるのですから、
理詰めでは解けません。
理詰めで解ける必要条件は、唯一解であることですから。
では、どうやって解かせるのでしょうか。
答えの気になる方は次話をクリックして下さい。
ところで、
数独自動生成新方式アプリ(ハイブリッド方式)Ver.3
数独自動生成新方式アプリ(ハイブリッド方式)Ver.4
数独自動生成新方式アプリ(ハイブリッド方式)Ver.5
においてはヒント数0の問題ではなくヒント数26を解かせてから、
問題を作成させています。
ある程度ヒント数がある問題を解いてから、
問題を作成する方が良問が出来ると考えているからですが、
本当であるかどうかはまだ検証していませんので、
この講義において検証もしてみたいと思っています。
第1話へ 第3話へ