Bombe
表記
あり得る条件付き領域全体の集合をAreaとする
code:bombe.sig
signature Area
Data
num: Cond
cond: Cond
Areaの要素は大文字A, B,..でラベルをつける
code:bombe
A: Area
Area の計算
和 ∪
非交和 +
交差 ∩
差 \
包含差 -
マス数や条件全体の集合を Cond とする
Cond の要素は大文字N, M,..でラベルをつける
code:bombe
N: Cond = x+
領域のマス数は()で表す
code:bombe
A(1)
B(x)
?の場合は省略を許す
code:bombe
A == A(?)
領域の条件は[]で表す
code:bombe
A1
Bx+(x)
?の場合は省略を許す
code:bombe
A(_) == A?(_)
基本
マス数以上の爆弾がある場合は全て爆弾
code:bombe
A x+(x)
---------
Bomb(A)
爆弾の個数が0以下ならばクリア
code:bombe
A 0-
------
Clear(A)
そのまま使うと計算量が増えすぎる
マス数以下
code:bombe
A(x)
-----------
(A)x-(x)
「以下」は部分領域についても適用される
code:bombe
(A + B)x-
-----------
Ax-
x 以下ならば x+y >= x 以下
code:bombe
Ax-
-----------
Ax+y-
組み合わせて
code:bombe
(A + B)x-
-----------
Ax+y-
「以上」と「以下」の引き算
code:bombe
(A + B)x+y+ ∧ (B + C)y-
-------------------------
(A + B)x+y+ ∧ By-
---------------------
Ax+
Ax+y+ ∧ By-
---------------------
(A / B)x+