I want to write a Prolog program for the following problem: From a set X = {1 ... 24} determine 8 numbers y1..y8 , such that for every n, 0 < n < 24 there are two numbers yi and yj with n = yi - yj, yi > yj.
Up to now I tried the following:
gen(A, B, C, D, E, F, G, H) :-
permutation([A, B, C, D, E, F, G, H, _, _, _,
_, _, _, _, _, _, _, _, _, _, _, _, _],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]).
distance(D, L) :-
random_member(X, L),
random_member(Y, L),
X - Y =:= D.
solution(A, B, C, D, E, F, G, H) :-
gen(A, B, C, D, E, F, G, H),
distance(1, [A, B, C, D, E, F, G, H]),
distance(2, [A, B, C, D, E, F, G, H]),
distance(3, [A, B, C, D, E, F, G, H]),
distance(4, [A, B, C, D, E, F, G, H]),
distance(5, [A, B, C, D, E, F, G, H]),
distance(6, [A, B, C, D, E, F, G, H]),
distance(7, [A, B, C, D, E, F, G, H]),
distance(8, [A, B, C, D, E, F, G, H]),
distance(9, [A, B, C, D, E, F, G, H]),
distance(10, [A, B, C, D, E, F, G, H]),
distance(11, [A, B, C, D, E, F, G, H]),
distance(12, [A, B, C, D, E, F, G, H]),
distance(13, [A, B, C, D, E, F, G, H]),
distance(14, [A, B, C, D, E, F, G, H]),
distance(15, [A, B, C, D, E, F, G, H]),
distance(16, [A, B, C, D, E, F, G, H]),
distance(17, [A, B, C, D, E, F, G, H]),
distance(18, [A, B, C, D, E, F, G, H]),
distance(19, [A, B, C, D, E, F, G, H]),
distance(20, [A, B, C, D, E, F, G, H]),
distance(21, [A, B, C, D, E, F, G, H]),
distance(22, [A, B, C, D, E, F, G, H]),
distance(23, [A, B, C, D, E, F, G, H]),
distance(24, [A, B, C, D, E, F, G, H]).
Can someone help me with that?
n=24? - dlask