Prolog "mapcolor_serno"

Admin User, erstellt 18. März 2024
         
/**
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
*
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
*
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
*
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
*
* Trademarks
* Jekejeke is a registered trademark of XLOG Technologies AG.
*/
problem(L) -->
{L = [A,B,C,D,E,F]},
dif(A, B), dif(A, C), dif(A, D), dif(A, E),
dif(B, C), dif(B, D), dif(B, F),
dif(C, D),
dif(D, E), dif(D, F),
dif(E, F).
indomain(X) :- between(1,4,X).
label([]).
label([K-S|T]) :- indomain(K), \+ (member(J,S), J==K), label(T).
/***********************************************************/
/* Inequality Graph */
/***********************************************************/
% dif(+Term, +Term, +List, -List)
dif(A, B, I, I) :- integer(A), integer(B), !, A \== B.
dif(A, B, I, O) :- integer(A), !, put(I, B, A, O).
dif(A, B, I, O) :- integer(B), !, put(I, A, B, O).
dif(A, B, I, O) :- A \== B, put(I, A, B, H), put(H, B, A, O).
% put(+Frame, +Term, +Term, -Frame)
put([K-S|L], J, V, [J-[V],K-S|L]) :- J @< K, !.
put([K-S|L], J, V, [K-T|L]) :- K == J, !, add(V, S, T).
put([K-S|L], J, V, [K-S|R]) :- put(L, J, V, R).
put([], K, V, [K-[V]]).
% add(+Term, +List, -List)
add(V, S, [V|S]) :- \+ (member(J,S), J==V), !.
add(_, S, S).
% ?- problem(M, [], L), time((between(1,1000,_), label(L), fail; true)).
% % 2,519,000 inferences, 0.141 CPU in 0.142 seconds (99% CPU, 17912889 Lips)
% ?- problem(M, [], L), aggregate_all(count, label(L), C).
% C = 72.