可能なすべての 3x3 魔方陣を見つけたいです。
英語のウィキペディアからの引用:
魔方陣は、各行と各列の数値、および主対角線と副対角線の数値をすべて加算した、正方格子内の個別の数値 (つまり、各数値が 1 回使用される) の配列であり、通常は整数です。同数まで。
1 つのサンプル ソリューションを次に示します。
8 1 6
3 5 7
4 9 2
を使用せずにすべてのソリューションを見つける Prolog プログラムを作成するにはどうすればよいlibrary(clpfd)ですか?
可能なすべての 3x3 魔方陣を見つけたいです。
英語のウィキペディアからの引用:
魔方陣は、各行と各列の数値、および主対角線と副対角線の数値をすべて加算した、正方格子内の個別の数値 (つまり、各数値が 1 回使用される) の配列であり、通常は整数です。同数まで。
1 つのサンプル ソリューションを次に示します。
8 1 6
3 5 7
4 9 2
を使用せずにすべてのソリューションを見つける Prolog プログラムを作成するにはどうすればよいlibrary(clpfd)ですか?
clpfd ではなく SWI-Prolog を使用したソリューションを次に示します。
square(L) :-
setof(S, carre(S), L).
carre(L) :-
L = [[A, B, C],
[D, E, F],
[G, H, I]],
flatten(L, LF),
numlist(1,9, LN),
init(LF, LN),
15 is A + B + C,
15 is D + E + F,
15 is G + H + I,
15 is A + D + G,
15 is B + E + H,
15 is C + F + I.
init([H|T], L) :-
select(H, L, L1),
init(T, L1).
init([], []).