anchor.diff:      (format out "~&")
       (loop with size = (size self)
             for i from 0 below size do
  -          (loop for j from 0 below size do
  -                (if (aref (places self) i j)
  +            (loop for j from 0 below size do
  +              (if (aref (places self) i j)
                     (format out " ~VD " width (label (aref (places self) i j)))
                     (format out " ~VA " width "")))
  -          (format out "~%")))
  +            (format out "~%")))
     (format out "~%")
  -  self);;print-object
  +  self)
   
   
   (defmethod get-coordinates ((self puzzle) relative-move)
  
positive.code: (defgeneric play             (puzzle))
  
  
  
  (defmethod initialize-instance ((self puzzle) &rest args)
    (declare (ignore args))
    (call-next-method)
    (let ((places (make-array (list (size self) (size self))
                              :element-type '(or null square)
                              :initial-element nil)))
      (declare (type (simple-array (or null square) (* *)) places))
      (loop with size = (size self)
            for i from 0 below size do
            (loop for j from 0 below size do
                  (unless (and (= i (1- size)) (= j (1- size)))
                    (setf (aref places i j)
                          (make-instance 'square :label (1+ (+ (* i size) j)))))))
      (setf (places self) places)
      (setf (empty  self) (cons (1- (size self)) (1- (size self))))
      self));;initialize-instance
  
  
  (defmethod print-object ((self puzzle) (out stream))
  
negative.code:     This software is in Public Domain.
      You're free to do with it as you please.")
    (:use "COMMON-LISP")
    (:export  "MAIN"))
  (in-package "COM.INFORMATIMAGO.COMMON-LISP.PUZZLE")
  
  (defclass square ()
    ;; What? A class for a mere integer?  No. We just leave to the reader
    ;; the pleasure to implement an picture-square subclass that would
    ;; display a picture part like on the real puzzle games.
    ((label :accessor label  :initform 0 :initarg :label :type integer)))
  
  (defmethod print-object ((self square) stream)
    (prin1 (label self) stream)
    self)
  
  
  
  (defclass puzzle ()
    ((size   :accessor size   :initform 4 :initarg :size :type (integer 2))
     (places :accessor places :initform nil
             :type (or null (simple-array (or null square) (* *))))
     (empty  :accessor empty  :initform nil :type list)))
  
  
  (defgeneric get-coordinates  (puzzle relative-move))
  