(FILECREATED "16-Aug-85 09:37:33" {ERIS}<LISPUSERS>NQUEENS.;4 8266   

      changes to:  (FNS NQUEENS NQUEENSINIT)

      previous date: "16-Aug-85 09:06:26" {ERIS}<LISPUSERS>NQUEENS.;3)


(* Copyright (c) 1982, 1985 by Eric Schoen. All rights reserved.)

(PRETTYCOMPRINT NQUEENSCOMS)

(RPAQQ NQUEENSCOMS ((FNS * NQUEENSFNS)
		    (BITMAPS * NQUEENSBITMAPS)
		    (ADDVARS (GLOBALVARS BSQUARE WSQUARE BQUEEN WQUEEN NQUEENSGRID NQUEENSBOARD))))

(RPAQQ NQUEENSFNS (CONFLICTP NQUEENS NQUEENSINIT PLACEQUEEN REMOVELASTDISPLAYEDQUEEN REMOVELASTQUEEN 
			     WAITFORMOVE \NQUEENS))
(DEFINEQ

(CONFLICTP
  [LAMBDA (QLST COLUMN ROW)                     (* edited: 	       |
						"23-Sep-82 15:54")
    (for Q in QLST do (COND					       |
			([OR (EQUAL ROW (CAR Q))		       |
			     (EQUAL COLUMN (CDR Q))		       |
			     (EQUAL (ABS (IDIFFERENCE ROW (CAR Q)))    |
				    (ABS (IDIFFERENCE COLUMN	       |
						      (CDR Q]	       |
			  (RETURN T)))				       |
       finally (RETURN NIL])

(NQUEENS
  (LAMBDA (N BETWEENMOVES)                                   (* ejs: "16-Aug-85 09:32")
    (OR BETWEENMOVES (SETQ BETWEENMOVES 250))
    (bind (WINDOW&GRID ←(NQUEENSINIT N)) while T
       do (LET (QLST NEXTMOVE)
	       (DECLARE (SPECVARS QLST NEXTMOVE))
	       (NLSETQ (\NQUEENS WINDOW&GRID QLST N 1))
	       (NQUEENSINIT N WINDOW&GRID))
	  (BLOCK 5000))))

(NQUEENSINIT
  (LAMBDA (N OLDWINDOW&GRID)                                 (* ejs: "16-Aug-85 09:36")
    (DECLARE (LOCALVARS NQUEENSBOARD NQUEENSGRID))
    (PROG ((BOARDPOS (OR OLDWINDOW&GRID (GETBOXPOSITION (ITIMES 40 N)
							(ITIMES 40 N))))
	   NQUEENSBOARD NQUEENSGRID)
          (COND
	    (OLDWINDOW&GRID (SETQ NQUEENSBOARD (CAR OLDWINDOW&GRID))
			    (SETQ NQUEENSGRID (CDR OLDWINDOW&GRID)))
	    (T (SETQ NQUEENSBOARD (CREATEW (create REGION
						   LEFT ←(fetch XCOORD of BOARDPOS)
						   BOTTOM ←(fetch YCOORD of BOARDPOS)
						   WIDTH ←(IPLUS (ITIMES N 40)
								 8)
						   HEIGHT ←(IPLUS (ITIMES N 40)
								  8))))))
          (COND
	    (OLDWINDOW&GRID (CLEARW NQUEENSBOARD)
			    (GRID (create REGION
					  LEFT ← 0
					  BOTTOM ← 0
					  WIDTH ← 40
					  HEIGHT ← 40)
				  N N 1 NQUEENSBOARD))
	    (T (GRID (SETQ NQUEENSGRID
		       (create REGION
			       LEFT ← 0
			       BOTTOM ← 0
			       WIDTH ← 40
			       HEIGHT ← 40))
		     N N 1 NQUEENSBOARD)))
          (for I from 0 to (SUB1 N) do (for J from 0 to (SUB1 N) when (EVENP (IPLUS I J))
					  do (BITBLT BSQUARE 1 1 NQUEENSBOARD
						     (ADD1 (LEFTOFGRIDCOORD I NQUEENSGRID))
						     (ADD1 (BOTTOMOFGRIDCOORD J NQUEENSGRID))
						     38 38 (QUOTE INPUT)
						     (QUOTE REPLACE))))
          (RETURN (OR OLDWINDOW&GRID (CONS NQUEENSBOARD NQUEENSGRID))))))

(PLACEQUEEN
  (LAMBDA (WINDOW&GRID QLST COLUMN ROW)                      (* ejs: "16-Aug-85 08:59")
    (WAITFORMOVE)
    (BITBLT (COND
	      ((EVENP (IPLUS ROW COLUMN))
		BQUEEN)
	      (T WQUEEN))
	    1 1 (CAR WINDOW&GRID)
	    (ADD1 (LEFTOFGRIDCOORD (SUB1 COLUMN)
				   (CDR WINDOW&GRID)))
	    (ADD1 (BOTTOMOFGRIDCOORD (SUB1 ROW)
				     (CDR WINDOW&GRID)))
	    38 38 (QUOTE INPUT)
	    (QUOTE REPLACE))
    (COND
      (QLST (APPEND (LIST (CONS ROW COLUMN))
		    QLST))
      (T (LIST (CONS ROW COLUMN))))))

(REMOVELASTDISPLAYEDQUEEN
  (LAMBDA (QLST)                                      (* ejs: "23-SEP-82 18:38")
    (PROG ((LASTQ (CAR QLST)))
          (BITBLT (COND
		    ((EVENP (IPLUS (SUB1 (CAR LASTQ))
				   (SUB1 (CDR LASTQ))))
		      BSQUARE)
		    (T WSQUARE))
		  1 1 NQUEENSBOARD (ADD1 (LEFTOFGRIDCOORD (SUB1 (CDR LASTQ))
							  NQUEENSGRID))
		  (ADD1 (BOTTOMOFGRIDCOORD (SUB1 (CAR LASTQ))
					   NQUEENSGRID))
		  38 38 (QUOTE INPUT)
		  (QUOTE REPLACE)))))

(REMOVELASTQUEEN
  (LAMBDA (WINDOW&GRID QLST)                                 (* ejs: "16-Aug-85 09:00")
    (PROG ((LASTQ (CAR QLST)))
          (WAITFORMOVE)
          (BITBLT (COND
		    ((EVENP (IPLUS (SUB1 (CAR LASTQ))
				   (SUB1 (CDR LASTQ))))
		      BSQUARE)
		    (T WSQUARE))
		  1 1 (CAR WINDOW&GRID)
		  (ADD1 (LEFTOFGRIDCOORD (SUB1 (CDR LASTQ))
					 (CDR WINDOW&GRID)))
		  (ADD1 (BOTTOMOFGRIDCOORD (SUB1 (CAR LASTQ))
					   (CDR WINDOW&GRID)))
		  38 38 (QUOTE INPUT)
		  (QUOTE REPLACE))
          (RETURN (CDR QLST)))))

(WAITFORMOVE
  [LAMBDA NIL                                                (* lmm "14-Mar-85 17:36")
    (BLOCK NIL NEXTMOVE)
    (SETQ NEXTMOVE (SETUPTIMER BETWEENMOVES NEXTMOVE])

(\NQUEENS
  (LAMBDA (WINDOW&GRID QLST NQS NEXTCOL)                     (* ejs: "16-Aug-85 08:58")
    (for R from 1 to NQS do (COND
			      ((NOT (CONFLICTP QLST NEXTCOL R))
				(SETQ QLST (PLACEQUEEN WINDOW&GRID QLST NEXTCOL R))
				(COND
				  ((ILESSP NEXTCOL NQS)
				    (COND
				      ((NOT (\NQUEENS WINDOW&GRID QLST NQS (ADD1 NEXTCOL)))
					(SETQ QLST (REMOVELASTQUEEN WINDOW&GRID QLST)))))
				  (T (ERROR!))))))))
)

(RPAQQ NQUEENSBITMAPS (BQUEEN BSQUARE WQUEEN WSQUARE))

(RPAQ BQUEEN (READBITMAP))
(40 40
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDHBDIBD@@"
"IBDICHIBDI@@"
"BDIBBIBDIB@@"
"DI@@BH@ABD@@"
"IBAMFLG@DI@@"
"BDBDDDDHIB@@"
"DIDCLGHEBD@@"
"IBD@@@@DDI@@"
"BDB@@@@HIB@@"
"DIAGOOIABD@@"
"IBE@@@ABDI@@"
"BDI@@@ADIB@@"
"DIA@@@AABD@@"
"IBEOOOOBDI@@"
"BDH@@@@DIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@")

(RPAQ BSQUARE (READBITMAP))
(40 40
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@"
"BDIBDIBDIB@@"
"DIBDIBDIBD@@"
"IBDIBDIBDI@@")

(RPAQ WQUEEN (READBITMAP))
(40 40
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@CH@@@@@@"
"@@@@BH@@@@@@"
"@@@@BH@@@@@@"
"@@ALFLG@@@@@"
"@@BDDDDH@@@@"
"@@DCLGHD@@@@"
"@@D@@@@D@@@@"
"@@B@@@@H@@@@"
"@@AGOOI@@@@@"
"@@A@@@A@@@@@"
"@@A@@@A@@@@@"
"@@A@@@A@@@@@"
"@@AOOOO@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@")

(RPAQ WSQUARE (READBITMAP))
(40 40
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@"
"@@@@@@@@@@@@")

(ADDTOVAR GLOBALVARS BSQUARE WSQUARE BQUEEN WQUEEN NQUEENSGRID NQUEENSBOARD)
(PUTPROPS NQUEENS COPYRIGHT ("Eric Schoen" 1982 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (593 5501 (CONFLICTP 603 . 1019) (NQUEENS 1021 . 1447) (NQUEENSINIT 1449 . 3038) (
PLACEQUEEN 3040 . 3654) (REMOVELASTDISPLAYEDQUEEN 3656 . 4137) (REMOVELASTQUEEN 4139 . 4790) (
WAITFORMOVE 4792 . 4991) (\NQUEENS 4993 . 5499)))))
STOP