language ESSENCE' 1.0
given N : int(1..) $ inputted size
$ starting board
given start : matrix indexed by [int(1..N), int(1..N)] of int(0..N)
find puzzle : matrix indexed by [int(1..N), int(1..N)] of int(1..N)
such that
$ initial board matches solution board
forAll i : int(1..N) .
forAll j : int(1..N) .
start[i,j] > 0 -> puzzle[i,j] = start[i,j],
$ every row is distinct
forAll i : int(1..N) .
allDiff(puzzle[i, ..]),
$ every column is distinct
forAll j : int(1..N) .
allDiff(puzzle[..,j])