/* Simple scheduling problem in Picat. From Marriott & Stuckey, "Programming in Constraints", page 17f. How to build a house, simple project management. Model created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => go. go => L = findall(LD, $build(LD)), writeln(L), writeln(len=L.length). build(LD) => LD = [TS,TA,TB,TC,TD,TE], LD :: 0..20, TS #>= 0, % start TA #>= TS + 7, % foundation TB #>= TA + 4, % interior walls TC #>= TA + 3, % exterior walls TD #>= TA + 3, % chimney TD #>= TC + 2, % roof % TE is the End task TE #>= TB + 2, % doors TE #>= TD + 3, % tiles TE #>= TC + 3, % windows TE #=< 15, % solve([$min(TE)], LD), solve(LD), writeln([ts=TS,ta=TA,tb=TB,tc=TC,td=TD,te=TE]).