anchor.diff:  
   (defun blink-row ()
     (dotimes (n 2)
  -    (qsleep 0.15) ; a SLEEP processing Qt events
  +    (qsleep 1/7) ; a SLEEP processing Qt events
       (unmark-row nil)
  -    (qsleep 0.15)
  +    (qsleep 1/7)
       (unmark-row nil "orange")))
   
   (defun add-to-history ()
  
positive.code:              (nth (random (length x:it)) x:it))))
      (let ((prev (previous-x-o))
            (curr (x-o)))
        ;; not too clever, human can win
        (x:when-it (or (check-win-move curr)
                       (check-win-move prev)
                       (mv 4)
                       (mv (rnd '(0 2 6 8)))
                       (mv (rnd '(1 3 5 7))))
          (h:hset (cell-id x:it) :text curr)
          (check-win)))))
  
  ;;; run
  
  
negative.code:                          (s 0 3 6) (s 1 4 7) (s 2 5 8) ; vertical
                           (s 0 4 8) (s 2 4 6)))         ; X
  
  (let (latest)
    (defun state (x-o)
      (let ((sum 0))
        (dotimes (i *cell-count*)
          (when (string= x-o (cell-text i))
            (incf sum (s i))))
        (setf latest sum)))
    (defun latest-state ()
      latest))
  
  (defun check-win ()
    (dolist (x-o '("X" "O"))
  