PrimeFORTH/nqueens.fth

49 lines
731 B
Forth
Raw Normal View History

8 constant rr
variable ii
variable ss
variable xx
variable yy
create aa rr 1 + allot
: rclaa @ aa + @ ;
: stoaa @ aa + ! ;
: NQPRINT
1 II !
BEGIN
II RCLAA .
1 II +!
II @ XX @ 1 + = until
;
: NQCORE
0 SS !
0 XX !
BEGIN
1 XX +!
RR XX STOAA
BEGIN
1 SS +!
XX @ YY !
BEGIN YY @ DUP II ! 1 > IF
-1 YY +!
XX RCLAA YY RCLAA - DUP
0 = SWAP ABS XX @ YY @ - = OR IF
0 YY !
BEGIN XX RCLAA 1 - DUP XX STOAA DUP 0 = IF
-1 XX +!
then
0 <>
UNTIL
THEN
THEN
II @ 2 <
UNTIL
YY @ 1 = UNTIL
RR XX @ = UNTIL
;
: NQUEENS
NQCORE
NQPRINT
;