diff options
author | Guillermo Ramos | 2012-05-03 14:40:48 +0200 |
---|---|---|
committer | Guillermo Ramos | 2012-05-05 14:35:05 +0200 |
commit | f2995fef020183e0abfcafdcf726e413cdab56c8 (patch) | |
tree | 5c4e9255f3f814f85da84f313c45fbd406aa9e4f /prolog/queens.pl | |
parent | 4fb3fa2758fd4db2bef1efc7ae531e0dadaf4ffa (diff) | |
download | 7l-f2995fef020183e0abfcafdcf726e413cdab56c8.tar.gz |
[Prolog] Día 3
Diffstat (limited to 'prolog/queens.pl')
-rw-r--r-- | prolog/queens.pl | 41 |
1 files changed, 41 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). |