monadiccp-0.7.7: examples/Zebra.hs
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
import Control.CP.FD.Example
main = example_sat_main_void model
model :: ExampleModel ()
model _ = exists $ \vars -> do
[n1,n2,n3,n4,n5,
c1,c2,c3,c4,c5,
p1,p2,p3,p4,p5,
a1,a2,a3,a4,a5,
d1,d2,d3,d4,d5] <- colList vars 25
let ns = slice vars (cte 0 @.. cte 4)
cs = slice vars (cte 5 @.. cte 9)
ps = slice vars (cte 10 @.. cte 14)
as = slice vars (cte 15 @.. cte 19)
ds = slice vars (cte 20 @.. cte 24)
vars `allin` (cte 1, cte 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