Skip to content

Instantly share code, notes, and snippets.

@kbhaines
Last active August 29, 2015 14:08
Show Gist options
  • Save kbhaines/a146b1bf214303778ffc to your computer and use it in GitHub Desktop.
Save kbhaines/a146b1bf214303778ffc to your computer and use it in GitHub Desktop.
Prolog Constraints Programming
?- use_module(library(clpfd)).
/*
Load: ['witch.prolog'].
Run: witch(5,Result).
*/
witch(Top, Vars) :-
Vars = [L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,
L15,L16,L17,L18,L19,L20,L21,L22,L23,L24,L25],
/* domains */
Vars ins 1..Top,
L1 = 1, L5 = 5, L11=2, L22=4,
/* row constraints */
all_different([L1,L2,L3,L4,L5]),
all_different([L6,L7,L8,L9,L10]),
all_different([L11,L12,L13,L14,L15]),
all_different([L16,L17,L18,L19,L20]),
all_different([L21,L22,L23,L24,L25]),
/* column constraints */
all_different([L1,L6,L11,L16,L21]),
all_different([L2,L7,L12,L17,L22]),
all_different([L3,L8,L13,L18,L23]),
all_different([L4,L9,L14,L19,L24]),
all_different([L5,L10,L15,L20,L25]),
/* diagonal constraints -Left to Right diagonals */
all_different([L1,L7,L13,L19,L25]),
all_different([L2,L8,L14,L20]),
all_different([L3,L9,L15]),
all_different([L4,L10]),
all_different([L6,L12,L18,L24]),
all_different([L11,L17,L23]),
all_different([L16,L21]),
/* diagonal constraints - Right to left diagonals */
all_different([L5,L9,L13,L17,L21]),
all_different([L4,L8,L12,L16]),
all_different([L3,L7,L11]),
all_different([L2,L6]),
all_different([L10,L14,L18,L22]),
all_different([L15,L19,L23]),
all_different([L20,L24]),
/*labeling([], [L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,
L15,L16,L17,L18,L19,L20,L21,L22,L23,L24,L25]).*/
labeling([], Vars),
write(L1), write(L2), write(L3), write(L4), write(L5),nl,
write(L6), write(L7), write(L8), write(L9), write(L10),nl,
write(L11), write(L12), write(L13), write(L14), write(L15),nl,
write(L16), write(L17), write(L18), write(L19), write(L20),nl,
write(L21), write(L22), write(L23), write(L24), write(L25),nl.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment