(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