Download
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])