anchor.diff:  
   (defconstant +max-digit+ 9)
   
  -(defun ways (sum len)
  -  "calculate the ways to sum up to `sum` using `len` terms"
  +(defun ways (sum len &optional other-cells)
  +  "calculate the ways to sum up to `sum` using `len` terms, optionally with already-marked cells"
     (defun ways-aux (sum len max-term)
       (cond
         ((minusp sum) '())
  
positive.code:        (loop for term from 1 upto (min sum max-term)
            nconc (mapcar (lambda (way) (cons term way))
                          (ways-aux (- sum term) (1- len) (1- term)))))))
    (mapcar #'nreverse
            (ways-aux sum len +max-digit+)))
  
  (defun make-all-candidates ()
    "list all candidate entries"
  
negative.code:   (declare (cell c))
    ;; TODO cleanup
    (let ((cand (make-all-candidates)))
      (when (and (horiz c) (horiz (horiz c)))
        (let ((h (horiz (horiz c))) (row (cell-row c)))
          (setf cand (nintersection cand
                                    (reduce #'union
                                            (ways h (length row) row))))))
      (when (and (verti c) (verti (verti c)))
        (let ((v (verti (verti c))) (col (cell-col c)))
          (setf cand (nintersection cand
                                    (reduce #'union
                                            (ways v (length col) col))))))
      (let ((col (cell-col c)))
        (loop for cell in col
           if (mark cell)
  