anchor.diff:  		       (input nil))
   		      ((not line) input)
   		    (push (parse-line line) input))))
  -      (let ((last-layer (depth (first layers))))
  +      (let ((last-layer (index (first layers))))
   	(make-instance 'game-board :layers (nreverse layers) :last-layer last-layer)))))
   
  -(defgeneric step-component (component))
  +(defgeneric step-component (component &key))
   
  -(defmethod step-component ((component firewall))
  -  (setf (scan-position component)
  -	(let ((scan-pos (scan-position component)))
  -	  (if scan-pos
  -	      (mod (1+ (scan-position component)) (depth component))
  -	      0)))
  -  component)
  +(defmethod step-component ((component firewall) &key)
  +  (let ((scan-pos (scan-position component)))
  +    ;; If we're at the bottom, moving down
  +    (cond ((and (> (direction component) 0) (= scan-pos (1- (depth component))))
  +	   ;; Change directions
  +	   (setf (direction component) -1))
  +	  ;; If we're at the top, moving up
  +	  ((and (< (direction component) 0) (= scan-pos 0))
  +	   ;; Change directions
  +	   (setf (direction component) 1)))
  +    ;; Apply the direction
  +    (incf (scan-position component) (direction component))))
   
   (defun scanner-active (firewall) (= 0 (or (scan-position firewall) -1)))
   
  -(defmethod step-component ((component game-board))
  +(defmethod step-component ((component game-board) &key skip-player)
     ;; Move the player
  -  (let ((pos (player-position component)))
  -    (setf (player-position component) (1+ (or pos -1))))
  +  (unless skip-player
  +    (let ((pos (player-position component)))
  +      (setf (player-position component) (1+ (or pos -1)))))
     ;; Scan all the firewalls
     (let ((pos (player-position component)))
       (dolist (layer (layers component))
  
positive.code:       ;; AND the scanner is active
        (when (and pos (= pos (index layer)) (scanner-active layer))
  	;; Then they are caught
  	(incf (total-severity component) (severity layer)))
        (step-component layer))
      component))
  
negative.code: 			 (total-severity :accessor total-severity
  					 :initform 0
  					 :type 'integer)
  			 (caught :accessor caught
  				 :initform nil)
  			 (player-position :accessor player-position
  					  :initform nil)))
  
  