{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
import Control.CP.FD.GecodeExample
import System.Environment
noattack i j qi qj = do
qi @/= qj
qi + i @/= qj + j
qi - i @/= qj - j
model :: ExampleModel ModelInt
model n = exists $ \p -> do
size p @= n
p `allin` (cte 0,n-1)
allDiff p
loopall (cte 0,n-2) $ \i ->
loopall (i+1,n-1) $ \j ->
noattack i j (p!i) (p!j)
return p
main = getArgs >>= \ case
[] -> withArgs ["gecode_run", "16"] $ example_sat_main_single_expr_gecode model
_ -> example_sat_main_single_expr_gecode model