anchor.diff:  			 (total-severity :accessor total-severity
   					 :initform 0
   					 :type 'integer)
  +			 (caught :accessor caught
  +				 :initform nil)
   			 (player-position :accessor player-position
   					  :initform nil)))
   
  
positive.code: 			      :initarg :depth
  			      :initform (error "The :depth parameter must be provided")
  			      :type 'integer)
  		       (scan-position :accessor scan-position
  				      :initform 0 
  				      :type 'integer)))
  
negative.code: 		       (input nil))
  		      ((not line) input)
  		    (push (parse-line line) input))))
        (let ((last-layer (index (first layers))))
  	(make-instance 'game-board :layers (nreverse layers) :last-layer last-layer)))))
  
  (defgeneric step-component (component &key))
  
  (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) &key skip-player)
    ;; Move the player
    (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))
  