Author: abaine Date: Sun Aug 19 21:21:46 2007 New Revision: 179
Modified: trunk/funds/src/examples/sudoku.lisp Log: Simplified solver, somehow slowing it down!
Modified: trunk/funds/src/examples/sudoku.lisp ============================================================================== --- trunk/funds/src/examples/sudoku.lisp (original) +++ trunk/funds/src/examples/sudoku.lisp Sun Aug 19 21:21:46 2007 @@ -46,11 +46,8 @@ (round (expt (puzzle-size puzzle) 3))))
(defun puzzle-solved-p (puzzle) - (let ((size (puzzle-size puzzle))) - (iter (for x below size) - (always (iter (for y below size) - (always (iter (for f in x-y-z-functions) - (always (group-solved puzzle f x y))))))))) + (= (round (expt (puzzle-size puzzle) 2)) + (tree-count +true+ (puzzle-tree puzzle) :key #'bt-value :test #'=)))
(defun puzzle-solvable-p (puzzle) (let ((size (puzzle-size puzzle))) @@ -129,14 +126,12 @@ "")))))))))
(defun puzzle-solve (puzzle) - (if (puzzle-solvable-p puzzle) - (if (puzzle-complete-p puzzle) - puzzle - (iter (for f in x-y-z-functions) - (for (values x y n) = (best-group puzzle f)) - (finding (list f x y) minimizing n into (best-list min)) - (finally (return (apply #'solve-group puzzle best-list))))) - nil)) + (if (puzzle-complete-p puzzle) + puzzle + (iter (for f in x-y-z-functions) + (for (values x y n) = (best-group puzzle f)) + (finding (list f x y) minimizing n into (best-list min)) + (finally (return (apply #'solve-group puzzle best-list))))))
(defun best-group (puzzle x-y-z-function) (let ((size (puzzle-size puzzle)))