:- use_module(library(tor_clpfd)). /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Magic Hexagon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ go1 :- mhex(Vars), search(labeling([ff], Vars)). sum38(Vs) :- sum(Vs, #=, 38). mhex(Vars) :- Vss = [[A,B,C],[A,D,H],[Q,R,S],[H,M,Q],[L,P,S],[C,G,L], [D,I,N,R],[M,I,E,B],[B,F,K,P],[R,O,K,G],[D,E,F,G],[M,N,O,P], [H,I,J,K,L],[Q,N,J,F,C],[A,E,J,O,S]], Vars = [A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S], Vars ins 1..19, maplist(sum38, Vss), all_different(Vars). %?- mhex(Vs), time(search(labeling([ff], Vs))). %@ % 558,399 inferences, 0.229 CPU in 0.346 seconds (66% CPU, 2436647 Lips) %@ Vs = [3, 17, 18, 19, 7, 1, 11, 16, 2|...] .