:- 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|...] .
