ナンバープレイスの解き方
(VBA編)
以下に、VBAを使った場合の解き方の考え方を説明します。 この問題は「ナンプレ マガジン」10月号の12〜13ページにあるサンプルでもあるので、もし この雑誌をお手元にある場合は どのように違うのか見ていただけると興味深いかと思われます。 VBAでは、まず最初に マスが空白の欄に、入る可能性のある数字を 一度全部算出します。 縦9列のどの列にも1〜9の数字が一つずつ入る、横も同様である というルールで 下の右の表に求めた数字を表示してあります。 その中で、1つのマスに1つの数字しかなければ、このマスはその数字で決まります。 この処理を繰り返していくと、4回目で完成しています。 なお、もうお気づきかと思いますが、雑誌では一番最初に左から3番目、下から3番目の 1 を求めていますが、 これは 太線で囲まれた3x3=9のマスの、どのブロックにも1〜9の数字が一つずつはいる というルールを考慮していないためです。 今回、このルールを考慮しなかった理由は 別の機会で説明しますが、その他の種類のナンバープレイスを解いていた時、最初にやった方法より、こちらの方法でやった方がプログラムが簡単になる というのを見つけたからです。 サンプルでは9までの数字ですが、このホームページの中にもあるように25までの数字を使っているものもあります。 また、太線で囲まれたプロックの形が決まっていない変形というのもあります。 今回は VBAで解く場合の考え方を説明するということでカットしました。 |