SAT ソルバーで数独を解く(2)

3月5日木曜日、晴れ

どうやら花粉がひどい。風も強かった。(風が強いから花粉の飛散も激しかったという流れが正しい?)

* * *

バグを直し、確認用のビルドを仕掛け、その間に次のバグを直して…… とやっていたらブランチを新しくするのを忘れ出しておいたプルリクエストに別の修正のコミットを積んでしまう。
作業を並行してやりすぎて頭がウニのようになっている。ちょっとオーバーヒート気味である。休ませないといけない。

* * *

昨晩の続きで SAT ソルバーに食わせる制約条件の洗い出し。

1マスに入る9つの数の制約は、少なくともひとつは真になるという条件がひとつ。そして同時に真になるのは高々ひとつという条件。これは2つの命題の否定の和として表現できる。9つの数字から2つ取り出す組み合わせは36通り。あわせて37。81マスあるので2997の制約条件。

行、列、箱とで同じように制約を数え上げられるので2997×4、全部で11988通りの制約が出る。

ところでペアの組み合わせを見たときに、行と箱、列と箱には同じペアの組み合わせが現れる。機械的に重複を削除したところ、相異なる制約は10530通りだった。

命題変数は81×9の729個。(制約なしなら2の729乗というとんでもない桁の組み合わせが表現できる)
これに10530通りの制約が加わり、さらに事前に置かれる20〜30の数字の制約を課して、そうするとたった1つの答えが定まる。

数独ってやっぱり面白い。

この記事が気に入ったらサポートをしてみませんか?