数独解法に斜め対応させてみた(コードなし)
ローカルなポイントカードにブルーカードというのがあって、当初は長野県内だけだったのが、その仕組みを他県にもというのがあったようで、いくつかのところでサービスがあるらしい。
年に二回案内などが届くのだけれど、今回数独のクイズが載っていた。人力で解いてもよいのだけれど、どうせならということで Ruby に解いてもらうことに。
とはいえいちからコードを書くのはちょっとなので検索すると案外たくさんでてくる。遠藤さんの書かれたものも見つかった。 そのなかのひとつを参考にしてみたのだが、残念ながらこのままでは今回の問題に完全に適合できない。縦、横、ブロックに加えて斜め 2 列もあるのだった。
手始めに斜めがないままに実行してみるときちんと結果はでるものの、斜め列を見ると同じ数字が出現してしまうことを避けることができない。ほかの縦、横、ブロックは合っている。
ということでよくわからないままにコードを読んでいっておよその動きを把握したところで斜めの計算も追加してみる。はじめはうまくいかなかったのだが、なんとか動作するようになった。結果を確認してみても問題ないようだ。
ただ、ここでもう一段考えるべきかというのが、はたして解はこれだけで本当によいのかどうか。あるいは、別解が存在するかもしれないというのをすべて検証するにはもう少し修正しないといけないのだろうなと。さて、どうするか。
たまの素材なのだから考えてみるべきという感じではあるのだけれど。
参考にさせてもらったのは、次のページのもの。
[ 【Ruby】【アルゴリズム】数独を解く。プログラミング言語Ruby 学習感想文 ~1章 - せかいや ]
# コードの差分だけでも gist にあげるべきか否か。
| 固定リンク
コメント