anchor.diff:                     for j below (width puzzle)
                      for cell in candidate
                      do (setf (aref (cells puzzle) row j) cell))
  -             if (solve-aux (1+ row))
  +             if (and (puzzle-prefix-ok-p puzzle (1+ row))
  +                     (solve-aux (1+ row)))
                do (return-from solve-aux puzzle))
             (loop for j below (width puzzle)
                for cell in original-row
  
positive.code: 
  ;;; FIXME add pruning to solve-puzzle
  ;;; FIXME set package
  
  (defclass puzzle ()
    ((height :reader height :initarg :height :documentation "number of rows"
             :initform (error "must specify height"))
     (width :reader width :initarg :width :documentation "number of columns"
            :initform (error "must specify width"))
     (cells :accessor cells :documentation "array of cells"
            :type '(array (or (eql :unknown) (eql :black) (eql :white)) 2))
     (horiz :accessor horiz :documentation "horizonal constraints")
     (verti :accessor verti :documentation "vertical constraints")))
  
  (defmethod initialize-instance :after ((puzzle puzzle) &key)
    (setf (cells puzzle)
  
negative.code:      (when (plusp run-size)
         (push run-size runs))
       (nreverse runs))))
  
  (defun puzzle-prefix-ok-p (puzzle rows)
    (loop
       for j below (width puzzle)
       for line = (get-col puzzle j)
       if (not (constraint-match-prefix-p line (svref (verti puzzle) j) rows))
       return nil
       finally (return t)))
  
  (defun puzzle-ok-p (puzzle)
    (loop
  