From f2995fef020183e0abfcafdcf726e413cdab56c8 Mon Sep 17 00:00:00 2001 From: Guillermo Ramos Date: Thu, 3 May 2012 14:40:48 +0200 Subject: [Prolog] Día 3 --- prolog/queens.pl | 41 +++++++++++++++++++++++++++++++++++++++++ prolog/sudoku.pl | 27 +++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 prolog/queens.pl create mode 100644 prolog/sudoku.pl (limited to 'prolog') 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]). -- cgit v1.2.3