; 8-QUEENS SOLUTION›; BY DAVE OBLAD›; (c) 1985, ANTIC PUBLISHING››BYTE ARRAY T(96),P(8),I(8),O(8),M(8)›BYTE A,B,C,D,X,Y,L1,L2,L3,OPT=53279››PROC SEARCH()› FOR X=0 TO D› DO› Y=X*8 B=1› FOR A=0 TO 7› DO› IF T(Y+A)#O(A) THEN B=0 FI› OD› IF B=1 THEN RETURN FI› OD›RETURN››PROC ROTATE()› FOR A=0 TO 7› DO› B=7-O(A) M(B)=A› OD› FOR A=0 TO 7› DO› O(A)=M(A)› OD›RETURN››PROC TEST()› FOR A=0 TO 7› DO O(A)=P(A) OD› FOR L1=0 TO 1› DO › FOR L2=0 TO 1› DO› FOR L3=0 TO 3› DO› SEARCH()› IF B=1 THEN RETURN FI› ROTATE()› OD› FOR A=0 TO 7› DO M(A)=O(A) OD› FOR A=0 TO 7› DO O(7-A)=M(A) OD› OD› FOR A=0 TO 7› DO O(A)=7-O(A) OD› OD› B=0›RETURN››PROC KEEP()› X=D*8› FOR A=0 TO 7› DO T(X+A)=P(A) OD›RETURN››PROC DISPLAY()›;REMOVE 5 SEMI-COLONS BELOW›;FOR UNIQUE SOLUTIONS ONLY!››;IF D#0 THEN TEST()›; IF B=1 THEN RETURN›; ELSE KEEP()›; FI›;FI›› FOR Y=0 TO 7› DO› FOR X=0 TO 7› DO› POSITION(X+15,Y+8) › IF P(Y)=X THEN PRINT("Q")› ELSE PRINT("+") FI› OD› OD› POSITION(18,18)› D==+1 PRINTB(D)›RETURN››PROC TRY()› FOR Y=0 TO 6› DO› FOR X=Y+1 TO 7› DO› A=P(X)-P(Y) B=X-Y› IF A>7 THEN A=255-A+1 FI› IF A=B THEN RETURN FI› OD› OD› DISPLAY()›RETURN››PROC SWAP()› C=0 I(C)==+1› WHILE I(C)=C+2› DO› I(C)=0 C==+1 I(C)==+1› IF C<7 THEN› FOR B=0 TO C› DO› A=P(B) P(B)=P(B+1) P(B+1)=A› OD› FI› OD› A=P(0) P(0)=P(1) P(1)=A›RETURN›››PROC MAIN()›BYTE CONSOLE=53279››DO› GRAPHICS(0) POKE(752,1)› POSITION(8,0)› PRINTE(" 8-QUEENS SOLUTIONS")› PRINTE(" BY DAVE OBLAD")› FOR A=0 TO 7 DO P(A)=A I(A)=0 OD› FOR A=0 TO 96 DO T(A)=0 OD› D=0› DO › TRY() SWAP()› FOR A=0 TO 7› DO› IF A#P(A) THEN EXIT FI› OD› IF A=8 OR OPT#7 THEN EXIT FI› OD› IF A=8 THEN POSITION(15,20)› PRINTE("COMPLETE")› PUTE()› PRINTE("PRESS  ÓÔÁŇÔ  TO RE-RUN")› FI› DO› UNTIL CONSOLE < 7› OD›OD›RETURN››