数独をVBAで解いてみる ①

既に数多の先達が居られるが、敢えて「数独をVBAで解いてみる」に挑戦する。
というのも、こんな方法はどうだろう?と思いついたものがあったから。
結果として既存アプローチの焼き直しになるかもしれないが、それはまあ、ご愛敬ということで。
f:id:Infoment:20190502220550p:plain

まず9行9列の情報を、どのように持たせるか、考えてみた。
f:id:Infoment:20190502221028p:plain

今回は、9×9=81の要素を持つ配列に情報を持たせることにした。
 配列(行,列)

さらに、各マスの持つ情報は、10桁の数字で管理する。初期値は全て
「2222222222」
とする。この10桁に登場する数値は、0~2の3種類だ。

  • 0:False
  • 1:True
  • 2:未確定

つまり初期値は、何もかも未確定ということになる。

この10桁の数値は、このマスにどの値が入るか、または入らないかを表している。最初の一桁目は、数値が確定したかどうかを表しており、従って0は入り得ない(必ず確定するから)。これを利用して、この10桁の数値が必ず10桁になるようにしている(例.0000000001 ⇒ 1にはならない)。

二桁目以降は、1から9までの数値を表している。
例えば、1行1列目の↓の場合で考えてみよう。
f:id:Infoment:20190502222225p:plain

5であることが確定しているため、最初の数字は1だ。5で確定しているため、6桁目が1となり、それ以外は0となる。
f:id:Infoment:20190502222620p:plain

繰り返しになるが、初期値の時点では何も確定していないので、オール2となる。
f:id:Infoment:20190502222723p:plain

この例における三行一列目は、どうだろう。
f:id:Infoment:20190502222852p:plain

ここに見える情報だけからいえば、以下の数字でないことが確定している。

3,5,6,8,9

また、他の数字については否定する情報が無いため、未確定となる。
従って、10桁の数字で表すと、以下のようになる。
f:id:Infoment:20190502223117p:plain

これを捏ね繰り回して、何とか全ての解を導き出せないか?というのが、今回の思い付き。

ここまでの思い付きだけで見切り発車してしまったため、上手く着陸できるか否か、これからが苦難と工夫の連続です。

参考まで。