1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | /* Magic Hexagon in SICStus Prolog. Prob023: Magic Hexagon http://www.cse.unsw.edu.au/~tw/csplib/prob/prob023/ Compare with the following model: * MiniZinc: http://www.hakank.org/minizinc/magic_hexagon.mzn Model created by Hakan Kjellerstrand, hakank @bonetmail .com */ :-use_module(library(clpfd)). :-use_module(library(lists)). go :- LD = [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S], domain(LD,1,19), all_distinct(LD), A + B + C #= 38, D + E + F + G #= 38, H + I + J + K + L #= 38, M + N + O + P #= 38, Q + R + S #= 38, A + D + H #= 38, B + E + I + M #= 38, C + F + J + N + Q #= 38, G + K + O + R #= 38, L + P + S #= 38, C + G + L #= 38, B + F + K + P #= 38, A + E + J + O + S #= 38, D + I + N + R #= 38, H + M + Q #= 38, A #< C, A #< H, A #< L, A #< Q, A #< S, C #< H, labeling([ff,bisect,up], LD), write (LD),nl, fd_statistics. |