第1講 序章(数独自動生成を実現するための課題)
第3話 ヒント数0の問題をいかに解くか?
答えは仮定法=試行錯誤法=トライアンドエラーで解くです。
ヒント数が多い問題ではトライアンドエラーで解答を作ってから、
そこから、
ⅱ.解が存在する
ⅲ.別解が存在しない
ⅳ.理詰めで解ける問題を選ぶ
の3条件を満たす問題を作成するわけです。
解答を先に作っているので、
ⅰ.問題作成段階で、いかなる行・列・ブロックにおいても数字を重複させてはならない
の条件は自動的に満たされています。
解答から数字を抜いて(空欄にして)問題を作成するので、
重複はあり得ないのです。
ではいかにして仮定法によって解くのでしょうか。
かなりの工夫が必要です。
前に簡単といったではないですか、
というクレームが来そうですが、
プログラムを洗練させれば、コンピュータにとって解答を見いだすことは用意であるという意味です。
数字を重複させない!
という条件下でいかにしてすべての空欄を埋めていくのか?
が問題になります。
洗練されていないプログラムでは、
作成速度が遅くなります。
解答を0.01秒以内で作れなくては数独の自動生成は藻屑になります。
なぜなら、解答から良問を作り出すためには、
何度も解答を作ってから問題を作り直すという試行錯誤をやらなければならないからです。
ヒント数が40を超えていれば別解の存在はほぼ心配なくなりますが、
ヒント数が28から35ぐらいまででは別解が存在してしまう可能性があり、
場合によっては数百回の試行錯誤を必要とするからです。
1つの解からいくらでも良問が作れるのかというとどうもそうではなさそうなのです。
解答の配置が悪いといかように空欄を作っていってもよい問題が出来そうにないというのが、
現段階の私の結論です。
配置が悪い解は捨てるしかない!
のです。ですから試行錯誤が必要となります。
数独自動生成新方式アプリ(ハイブリッド方式)Ver.3
数独自動生成新方式アプリ(ハイブリッド方式)Ver.4
数独自動生成新方式アプリ(ハイブリッド方式)Ver.5
においてヒント数を26にしている理由は、
解の配置をよくするためなのです。
第2話へ 第4話へ