さっそくイラストロジックを解くアルゴリズムを考えていきます。
ボゴ法
ボゴソート(ボゴソート - Wikipedia)を参考にしたのでボゴ法と名付けました。神頼みによる解法になります。
- まず各行それぞれについて、行の条件を満たすようにランダムにマスを塗る
- 全ての列について、キーを満たすマスの塗り方がなされているかを検査する
- もし全ての列について、条件を満たしていればその盤面を出力する
- もし条件を満たしていない列が一つでもあれば、その盤面を白紙に戻し2からやり直す
- もし全ての列について、条件を満たしていればその盤面を出力する
1. まず各行それぞれについて、行の条件を満たすようにランダムにマスを塗ります。
どんどん塗っていきます。
そして、
2. 全ての列について、キーを満たすマスの塗り方がなされているかをチェックします。
この場合、明らかに条件をみたしていないので、また1からやり直します。
上記アルゴリズムを見れば、効率の悪さは分かると思いますが、それでもたった1回で終わる可能性も秘めています。(恐ろしく確率は低いですが...)
終わらなさそうですね。。
小さいサイズの問題なら, 数回で終了することもあります。
ソースコード
追加したのはbogo_search
とfeasible
関数の2つです。
上記のアルゴリズムで動作するようになっています。
参考サイト:
連番画像から簡単にgifアニメを作る - Qiita