/*********************************************************** langford2.pi from Constraint Solving and Planning with Picat, Springer by Neng-Fa Zhou, Hakan Kjellerstrand, and Jonathan Fruhman ***********************************************************/ import cp. main => langford(4, Solution, Position), println(solution=Solution), println(position=Position). langford(K, Solution, Position) => K2 = 2*K, Position = new_list(K2), Position :: 1..K2, Solution = new_list(K2), Solution :: 1..K, all_distinct(Position), foreach (I in 1..K) Position[K+I] #= Position[I] + I+1, element(Position[I],Solution,I), element(Position[K+I],Solution,I) end, % symmetry breaking: Solution[1] #< Solution[K2], Vars = Solution ++ Position, solve(Vars).