summaryrefslogtreecommitdiff
path: root/prolog
diff options
context:
space:
mode:
Diffstat (limited to 'prolog')
-rw-r--r--prolog/queens.pl41
-rw-r--r--prolog/sudoku.pl27
2 files changed, 68 insertions, 0 deletions
diff --git a/prolog/queens.pl b/prolog/queens.pl
new file mode 100644
index 0000000..505ad5b
--- /dev/null
+++ b/prolog/queens.pl
@@ -0,0 +1,41 @@
+valid_queen((Row,Col)) :-
+ Range = [1,2,3,4,5,6,7,8],
+ member(Row, Range),
+ member(Col, Range).
+
+valid_board([]).
+valid_board([H|T]) :-
+ valid_queen(Head).
+ valid_board(T).
+
+rows([],[]).
+rows([(Row,_)|QueensTail, [Row|RowsTail]) :-
+ rows(QueensTail, RowsTail).
+
+cols([],[]).
+cols([(_,Col)|QueensTail, [Col|ColsTail]) :-
+ rows(QueensTail, ColsTail).
+
+diags1([],[]).
+diags1([(Row,Col)|QueensTail], [Diagonal|DiagonalsTail]) :-
+ Diagonal is Col - Row,
+ diags1(QueensTail, DiagonalsTail).
+
+diags2([],[]).
+diags2([(Row,Col)|QueensTail], [Diagonal|DiagonalsTail]) :-
+ Diagonal is Col + Row,
+ diags2(QueensTail, DiagonalsTail).
+
+eight_queens(Board) :-
+ length(Board, 8),
+ valid_board(Board),
+
+ rows(Board, Rows),
+ cols(Board, Cols),
+ diags1(Board, Diags1),
+ diags2(Board, Diags2),
+
+ fd_all_different(Rows),
+ fd_all_different(Cols),
+ fd_all_different(Diags1),
+ fd_all_different(Diags2).
diff --git a/prolog/sudoku.pl b/prolog/sudoku.pl
new file mode 100644
index 0000000..159e212
--- /dev/null
+++ b/prolog/sudoku.pl
@@ -0,0 +1,27 @@
+valid([]).
+valid([H|T]) :-
+ fd_all_different(H),
+ valid(T).
+
+sudoku(Puzzle, Solution) :-
+ Solution = Puzzle,
+ Puzzle = [S11,S12,S13,S14,
+ S21,S22,S23,S24,
+ S31,S32,S33,S34,
+ S41,S42,S43,S44],
+ fd_domain(Puzzle,1,4),
+ Row1 = [S11,S12,S13,S14],
+ Row2 = [S21,S22,S23,S24],
+ Row3 = [S31,S32,S33,S34],
+ Row4 = [S41,S42,S43,S44],
+ Col1 = [S11,S21,S31,S41],
+ Col2 = [S12,S22,S32,S42],
+ Col3 = [S13,S23,S33,S43],
+ Col4 = [S14,S24,S34,S44],
+ Sqr1 = [S11,S12,S21,S22],
+ Sqr2 = [S13,S14,S23,S24],
+ Sqr3 = [S31,S32,S41,S42],
+ Sqr4 = [S33,S34,S43,S44],
+ valid([Row1, Row2, Row3, Row4,
+ Col1, Col2, Col3, Col4,
+ Sqr1, Sqr2, Sqr3, Sqr4]).