Skip to content

Instantly share code, notes, and snippets.

@mlhaufe
Created June 22, 2015 00:54
Show Gist options
  • Save mlhaufe/f6022730ff9f6da61591 to your computer and use it in GitHub Desktop.
Save mlhaufe/f6022730ff9f6da61591 to your computer and use it in GitHub Desktop.
insert(X, Xs, [X|Xs]).
insert(E, [X|Xs], [X|Ys]) :- insert(E,Xs,Ys).
permute([],[]).
permute(L,[H|T]) :- insert(H,R,L), permute(R,T).
sudoku([[X11,X12,X13,X14,X15,X16,X17,X18,X19],
[X21,X22,X23,X24,X25,X26,X27,X28,X29],
[X31,X32,X33,X34,X35,X36,X37,X38,X39],
[X41,X42,X43,X44,X45,X46,X47,X48,X49],
[X51,X52,X53,X54,X55,X56,X57,X58,X59],
[X61,X62,X63,X64,X65,X66,X67,X68,X69],
[X71,X72,X73,X74,X75,X76,X77,X78,X79],
[X81,X82,X83,X84,X85,X86,X87,X88,X89],
[X91,X92,X93,X94,X95,X96,X97,X98,X99]]) :-
L = [1,2,3,4,5,6,7,8,9],
permute([X11,X12,X13,X14,X15,X16,X17,X18,X19],L), %rows
permute([X21,X22,X23,X24,X25,X26,X27,X28,X29],L),
permute([X31,X32,X33,X34,X35,X36,X37,X38,X39],L),
permute([X41,X42,X43,X44,X45,X46,X47,X48,X49],L),
permute([X51,X52,X53,X54,X55,X56,X57,X58,X59],L),
permute([X61,X62,X63,X64,X65,X66,X67,X68,X69],L),
permute([X71,X72,X73,X74,X75,X76,X77,X78,X79],L),
permute([X81,X82,X83,X84,X85,X86,X87,X88,X89],L),
permute([X91,X92,X93,X94,X95,X96,X97,X98,X99],L),
permute([X11,X21,X31,X41,X51,X61,X71,X81,X91],L), %cols
permute([X12,X22,X32,X42,X52,X62,X72,X82,X92],L),
permute([X13,X23,X33,X43,X53,X63,X73,X83,X93],L),
permute([X14,X24,X34,X44,X54,X64,X74,X84,X94],L),
permute([X15,X25,X35,X45,X55,X65,X75,X85,X95],L),
permute([X16,X26,X36,X46,X56,X66,X76,X86,X96],L),
permute([X17,X27,X37,X47,X57,X67,X77,X87,X97],L),
permute([X18,X28,X38,X48,X58,X68,X78,X88,X98],L),
permute([X19,X29,X39,X49,X59,X69,X79,X89,X99],L),
permute([X11,X12,X13,X21,X22,X23,X31,X32,X33],L), %boxes
permute([X14,X15,X16,X24,X25,X26,X34,X35,X36],L),
permute([X17,X18,X19,X27,X28,X29,X37,X38,X39],L),
permute([X41,X42,X43,X51,X52,X53,X61,X62,X63],L),
permute([X44,X45,X46,X54,X55,X56,X64,X65,X66],L),
permute([X47,X48,X49,X57,X58,X59,X67,X68,X69],L),
permute([X71,X72,X73,X81,X82,X83,X91,X92,X93],L),
permute([X74,X75,X76,X84,X85,X86,X94,X95,X96],L),
permute([X77,X78,X79,X87,X88,X89,X97,X98,X99],L).
%X = [[3,9,4,_,_,2,6,7,_],
% [_,_,_,3,_,_,4,_,_],
% [5,_,_,6,9,_,_,2,_],
% [_,4,5,_,_,_,9,_,_],
% [6,_,_,_,_,_,_,_,7],
% [_,_,7,_,_,_,5,8,_],
% [_,1,_,_,6,7,_,_,8],
% [_,_,9,_,_,8,_,_,_],
% [_,2,6,4,_,_,7,3,5]],sudoku(X).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment