数独をVBAで解いてみる ①
既に数多の先達が居られるが、敢えて「数独をVBAで解いてみる」に挑戦する。
というのも、こんな方法はどうだろう?と思いついたものがあったから。
結果として既存アプローチの焼き直しになるかもしれないが、それはまあ、ご愛敬ということで。
まず9行9列の情報を、どのように持たせるか、考えてみた。
今回は、9×9=81の要素を持つ配列に情報を持たせることにした。
配列(行,列)
さらに、各マスの持つ情報は、10桁の数字で管理する。初期値は全て
「2222222222」
とする。この10桁に登場する数値は、0~2の3種類だ。
- 0:False
- 1:True
- 2:未確定
つまり初期値は、何もかも未確定ということになる。
この10桁の数値は、このマスにどの値が入るか、または入らないかを表している。最初の一桁目は、数値が確定したかどうかを表しており、従って0は入り得ない(必ず確定するから)。これを利用して、この10桁の数値が必ず10桁になるようにしている(例.0000000001 ⇒ 1にはならない)。
二桁目以降は、1から9までの数値を表している。
例えば、1行1列目の↓の場合で考えてみよう。
5であることが確定しているため、最初の数字は1だ。5で確定しているため、6桁目が1となり、それ以外は0となる。
繰り返しになるが、初期値の時点では何も確定していないので、オール2となる。
この例における三行一列目は、どうだろう。
ここに見える情報だけからいえば、以下の数字でないことが確定している。
3,5,6,8,9
また、他の数字については否定する情報が無いため、未確定となる。
従って、10桁の数字で表すと、以下のようになる。
これを捏ね繰り回して、何とか全ての解を導き出せないか?というのが、今回の思い付き。
ここまでの思い付きだけで見切り発車してしまったため、上手く着陸できるか否か、これからが苦難と工夫の連続です。
参考まで。