数独(再挑戦)① 27×27で表現する
少し前に、Excel VBAで数独を解いてみた。機械的な総当たりではなく、人の頭で考えるかの如く作りこもうとして、途中で挫折していた。
そこで今回、新たな構想で再挑戦することにした。今回も途中で挫折するかもしれないが、とりあえず、やれるところまで挑戦しよう。
今回は、一つの数字を3×3の配列に拡張してみる。
例えば、一番左上の3という数字。
これは、新しい構想では、このように表現される。
そのマスに入る可能性があれば、具体的にその数値を入れておくわけだ。入る可能性が無い場合は、0が入る。だから、全ての数が入るかもしれない場合は、このような表現になる。
そこで今日は、このベースになる、真っ新な状態の配列を作成してみよう。
できれば、なるべくシンプルにしたい。27×27のループを、条件分岐なしで構築したい。ということで、色々と捏ね繰り回して作成したのがこちら。
Sub test() Dim arr(1 To 27, 1 To 27) As Variant Dim r As Long Dim c As Long For r = 1 To 27 For c = 1 To 27 arr(r, c) = ((r - 1) Mod 3) * 3 + (c - 1) Mod 3 + 1 Next Next Range("A1").Resize(27, 27) = arr End Sub
実行して、先程の画像どおりに作成できることを確認した。
次回は、実際の問題を27×27に置き換えることに挑戦です。
参考まで。