数独(再挑戦)① 27×27で表現する

少し前に、Excel VBA数独を解いてみた。機械的な総当たりではなく、人の頭で考えるかの如く作りこもうとして、途中で挫折していた。

そこで今回、新たな構想で再挑戦することにした。今回も途中で挫折するかもしれないが、とりあえず、やれるところまで挑戦しよう。
f:id:Infoment:20191130225946p:plain

今回は、一つの数字を3×3の配列に拡張してみる。
例えば、一番左上の3という数字。
f:id:Infoment:20191130230208p:plain

これは、新しい構想では、このように表現される。
f:id:Infoment:20191130230312p:plain

そのマスに入る可能性があれば、具体的にその数値を入れておくわけだ。入る可能性が無い場合は、0が入る。だから、全ての数が入るかもしれない場合は、このような表現になる。
f:id:Infoment:20191130230510p:plain

そこで今日は、このベースになる、真っ新な状態の配列を作成してみよう。
f:id:Infoment:20191130230906p:plain

できれば、なるべくシンプルにしたい。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に置き換えることに挑戦です。

参考まで。