Skip to content

Instantly share code, notes, and snippets.

@w-shackleton
Created March 30, 2016 14:54
Show Gist options
  • Save w-shackleton/e3b615959766730bcd0428a1b1a4abbd to your computer and use it in GitHub Desktop.
Save w-shackleton/e3b615959766730bcd0428a1b1a4abbd to your computer and use it in GitHub Desktop.
Prolog Futoshiki solver
?- use_module(library(clpfd)).
valid5(L) :- L ins 1..5, all_different(L).
futo([
[X11, X12, X13, X14, X15],
[X21, X22, X23, X24, X25],
[X31, X32, X33, X34, X35],
[X41, X42, X43, X44, X45],
[X51, X52, X53, X54, X55]]) :-
valid5([X11, X12, X13, X14, X15]),
valid5([X21, X22, X23, X24, X25]),
valid5([X31, X32, X33, X34, X35]),
valid5([X41, X42, X43, X44, X45]),
valid5([X51, X52, X53, X54, X55]),
valid5([X11, X21, X31, X41, X51]),
valid5([X12, X22, X32, X42, X52]),
valid5([X13, X23, X33, X43, X53]),
valid5([X14, X24, X34, X44, X54]),
valid5([X15, X25, X35, X45, X55]),
% Set these as per your problem
X13 #< X14,
X14 #< X24,
X32 #< X33,
X33 #< X43,
X43 #< X44,
X55 #< X45,
X53 #< X52,
X52 #< X51,
X55 #= 2,
labeling([], [
X11, X12, X13, X14, X15,
X21, X22, X23, X24, X25,
X31, X32, X33, X34, X35,
X41, X42, X43, X44, X45,
X51, X52, X53, X54, X55]),
print([
[X11, X12, X13, X14, X15],
[X21, X22, X23, X24, X25],
[X31, X32, X33, X34, X35],
[X41, X42, X43, X44, X45],
[X51, X52, X53, X54, X55]]).
?- futo(_).
?- halt.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment