Download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
language Essence 1.3
$ prob032.essence: Maximum Density Still Life
$ Problem details available at http://www.csplib.org/Problems/prob032/
 
$ n: the side length of the board
given n : int(1..)
 
$ Index: cell indicies can be between 1 and n on both axes
$ Cell: a cell is a tuple made up of two elements, an x-index and a y-index
letting Index be domain int(1..n+2)
letting Cell  be domain tuple (Index,Index)
 
$ alive: the set of cells that are alive
find alive : set of Cell
 
$ maximise the number of cells that are alive
maximising |alive|
 
such that
$ all border cells are dead
    forAll (a,b) : Cell
        , |{a,b} intersect {1,n+2}| = 0
        . !((a,b) in alive),
     
$ alive cells have between 2 and 3 alive neighbours (between 3 and 4, when
$ including the cell itself)
    forAll (a,b) in alive .
        3 <= ( sum i,j : int(-1..1) . toInt((a+i,b+j) in alive) ) /\
        (sum i,j : int(-1..1) . toInt((a+i,b+j) in alive)) <= 4,
 
$ dead cells must not have 3 alive neighbours
    forAll (a,b) : Cell
        , !((a,b) in alive)
        . (sum i,j : int(-1..1) . toInt((a+i,b+j) in alive)) != 3