第3講 試行錯誤法でヒント数0数独の解答を作る(2)
第10話 謎解き
ズバリ答えを書きましょう。
飛びは81と互いに素な整数を選べばよいのです。
aとbが互いに素とは、(a,b)の最大公約数が1である組のことです。
例をあげましょう。
(5,81),(20,81),(47,81),・・・
などです。
1 2 3 4 5 6
(1,6)のときに互いに素ですが、飛び1ではヒントのある場所が偏ってしまいダメでしたね。
同じく(5,6)も(1,6)の逆バージョンにすぎないから駄目です。
(5,6)は左に1進むとおなじです。(5,6)=(-1,6)
(2,6),(3,6),(4,6)
もすべて互いに素ではありません。
81と互いに素でないものは、
(3,81),(6,81),(9,81),(12,81),・・・
などです。81が3の倍数なので、3の倍数であるものは81とは互いに素にならいのです。
それでは、C++に戻って
*の場所だけ解答の数字を残して、
問題を作成してみましょう。
尚、はシード値を時刻から取得していますので毎回異なってしまうので、
上下を同じにするために
一時的にsrand(0);としていますが、本来は srand(u); です。
ヒント数22としてはまあまあ数独らしくなっています。
ですが、あまりバランスが良くないので、
srand(0);をsrand(2);に変更してください。
私は、自然な配置であれば左右対称・上下対称・点対称でなくてもよいと考えています。
ですから、出題は非対称形・左右対称形・上下対称形・点対称形・左右上下対称形・ハート形・クリスマスツリー形
の7通りにする予定です。
本当に数独になっているかは、この状態で解いて別解がないことを証明しなければなりません。
ヒントとなる数字が入っている数独を解くのは次講の課題なので、
数独らしく見えるものができたことに満足して次話でコードをお見せして第3講を閉じます。
第9話へ 第11話へ
トップへ