第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話へ

トップへ