monadiccp-0.7.5: examples/Zebra.hs
import Control.CP.FD.Example.Example
import Control.CP.FD.FD
import Control.CP.FD.Expr
import Control.CP.SearchTree
main = example_main_void model
model :: FDSolver solver => Tree (FDWrapper solver) [FDExpr solver]
model =
exist 5 $ \ns@[n1,n2,n3,n4,n5] ->
exist 5 $ \cs@[c1,c2,c3,c4,c5] ->
exist 5 $ \ps@[p1,p2,p3,p4,p5] ->
exist 5 $ \as@[a1,a2,a3,a4,a5] ->
exist 5 $ \ds@[d1,d2,d3,d4,d5] ->
let vars = ns ++ cs ++ ps ++ as ++ ds in
vars `allin` (1,5) /\
allDiff ns /\
allDiff cs /\
allDiff ps /\
allDiff as /\
allDiff ds /\
n1 @= c2 /\
n2 @= a1 /\
n3 @= p1 /\
n4 @= d3 /\
n5 @= 1 /\
d5 @= 3 /\
p3 @= d1 /\
c1 @= d4 /\
p5 @= a4 /\
p2 @= c3 /\
c1 @= c5+1 /\
plusorminus a3 p4 1 /\
plusorminus a5 p2 1 /\
plusorminus n5 c4 1 /\
return vars
plusorminus x y c =
x @= y+c \/ x @= y-c