att vara minesweeper
hints:
eller inte ? eller eller ? eller vara
? ? det ? ? det ? eller
? ? ? ? ? ? det ?
? är ? frågan ? ? ? eller
eller ? ? ? är är ? eller
vara inte det ? ? ? det ?
att vara ? det ? ? ? inte
att vara eller ? eller inte ? eller
mines:
att att vara att att vara att att
vara vara att att vara att vara att
att att vara vara att vara att vara
vara att vara att vara vara att att
att vara vara vara att att vara att
att att att att vara vara att vara
att att vara att vara att vara att
att att att vara att att vara att
hints:
eller inte ? eller eller ? eller vara
? ? det ? ? det ? eller
? ? ? ? ? ? det ?
? är ? frågan ? ? ? eller
eller ? ? ? är är ? eller
vara inte det ? ? ? det ?
att vara ? det ? ? ? inte
att vara eller ? eller inte ? eller
mines:
att att vara att att vara att att
vara vara att att vara att vara att
att att vara vara vara att att vara
vara att vara att vara vara vara att
att vara vara att att att att att
att att att vara vara vara att vara
att att vara att att vara vara att
att att att vara att att vara att
hints:
eller inte ? eller eller ? eller vara
? ? det ? ? det ? eller
? ? ? ? ? ? det ?
? är ? frågan ? ? ? eller
eller ? ? ? är är ? eller
vara inte det ? ? ? det ?
att vara ? det ? ? ? inte
att vara eller ? eller inte ? eller
mines:
att att vara att att vara att att
vara vara att vara att att vara att
att att vara att vara vara att vara
vara att vara att vara vara att att
att vara vara vara att att vara att
att att att att vara vara att vara
att att vara att vara att vara att
att att att vara att att vara att
hints:
eller inte ? eller eller ? eller vara
? ? det ? ? det ? eller
? ? ? ? ? ? det ?
? är ? frågan ? ? ? eller
eller ? ? ? är är ? eller
vara inte det ? ? ? det ?
att vara ? det ? ? ? inte
att vara eller ? eller inte ? eller
mines:
att att vara att att vara att att
vara vara att vara att att vara att
vara att att vara vara vara att vara
vara att vara att vara vara att att
att vara vara vara att att vara att
att att att att vara vara att vara
att att vara att vara att vara att
att att att vara att att vara att
MiniZinc model
int: r;
int: c;
int: X = -1;
array[0..6] of string: s = array1d(0..6,
["att ",
"vara ",
"eller ",
"inte ",
"det ",
"är ",
"frågan "]);
array[1..r, 1..c] of -1..8: hints;
array[1..r, 1..c] of var 0..1: mines;
constraint
forall(i in 1..r, j in 1..c) (
if hints[i,j] >= 0 then
hints[i,j] = sum(a,b in {-1,0,1} where
i+a > 0 /\ j+b > 0 /\
i+a <= r /\ j+b <= c
) (mines[i+a,j+b])
else
true
endif
/\ (hints[i,j] > X -> mines[i,j] = 0)
% /\ (hints[i,j] = X <- mines[i,j] = 1) % redundant
);
solve satisfy;
% From "Some Minesweeper Configurations", page 3
% 4 solutions
r=8;
c=8;
hints = array2d(1..r,1..c,[
2,3,X,2,2,X,2,1,
X,X,4,X,X,4,X,2,
X,X,X,X,X,X,4,X,
X,5,X,6,X,X,X,2,
2,X,X,X,5,5,X,2,
1,3,4,X,X,X,4,X,
0,1,X,4,X,X,X,3,
0,1,2,X,2,3,X,2
]);
output ["\n\nhints:\n"] ++
[ if j = 1 then "\n" else " " endif ++
if hints[i,j] = -1 then "? " else show(s[hints[i,j]]) endif
| i in 1..r ,j in 1..c ] ++
[ "\n\nmines:\n" ] ++ [
if j = 1 then "\n" else " " endif ++
show(s[fix(mines[i,j])])
| i in 1..r,j in 1..c ];
Back to Constrained-based constraint poetry
Created by Hakan Kjellerstrand hakank@gmail.com