ホームページ目次2011-06-10(前)2011-06-14(次)

ナンプレをしらみつぶしで解いてみよう

2011年6月13日

パズルは、どうやったらうまく解けるか考えて、効率よく解いてしまうものである。

という考えが一般的である。だから、ついその正反対のことをやってみたくならないだろうか。

というのを、ナンプレで試してみた。 しかし、自分で数字を入れては消しというのをやる気にはならないので、 コンピュータにやらせたのである。

ナンプレの盤面が表示されているだろうか。 Javaが動くようになっていれば、そうなるはずだ。

まず、何も考えずに [Start] ボタンを押してみよう。 すると、延々と試すのだ。

コンピュータはものすごく高速なので、そんなやり方をやっても、1秒もかからずに、すべての可能性を調べてしまう。 それでは人間には速過ぎて分からないので、マスに数字を入れるごとに、休憩を入れている。それでも、結構速い。

やり方は、こうだ。左上隅から空きマスを探し、1から順番に入れられる数字を入れる。 もし入れられれば、さらに右の空きマスを探す。右端までいったら次のヨコ列の左端から空きマスを探す。 こうやって見つかった空きマスに、また1から順に調べて入れられる数字を入れる。

こうやってどんどんやっていくと、そのうち、空きますに、1~9のどの数字も入れられなくなる。 すると、1つ戻って、その数字を1つ増やす、それでもダメならさらに増やす。 大丈夫な数字が見つかったら、また右の方に進む。 逆に、もう数字が9になり、これ以上ダメとなったら、左に戻る。

要するに、これを繰り返せば、すべて調べ尽くせる。この途中で、最後までルールに違反せずに入れられば、それが解である。 ちゃんと作られて入れば、すべてを調べ尽くして、最後まで詰められることが1回だけあるはずだ。

このどうしようもない人間には不可能な調べ方を、 コンピュータの世界では、もったいぶって「再帰」とか「リカーシブ」とか言うのである。 あまり馬鹿な方法なので、このプログラムを「馬鹿独」と名付けておいた。 学生のプログラミングの基礎でやるとちょうど良いだろうか。 馬鹿なやり方はコンピュータに任せ、人間は賢く遊ぼう。


ホームページ目次2011-06-10(前)2011-06-14(次)