10 REM BACKG.ECB 15 REM .....BACKGAMMON....by William Lappen...System: DEC-10 20 REM .....from PERSONAL COMPUTING, FEB. 1980, page 34 30 REM .....Adapted for SOL-20 APR. 1980 R.E.H. 40 REM .....Changed to make it run: 5220,5950,6820 50 REM .....Adjustments for points outside home board: 4860 60 LET K$="&K": LET J$="&J": PRINT K$;J$;J$;J$ 62 PRINT ,"********************************" 63 PRINT ,"* *" 64 PRINT ,"* <<<===--BACKGAMMON--===>>> *" 65 PRINT ,"* *" 66 PRINT ,"********************************" 67 FOR X=1 TO 4: PRINT : NEXT X 68 INPUT (1,0)" Would you to see how to play (Y/N) ---=>",A$ 90 LET A$=A$+"N": IF A$(1,1)="N" THEN 240 ELSE PRINT K$ 100 PRINT " You are going to challenge the computor to an" 110 PRINT "ancient game of luck and skill. Your HOME BOARD" 120 PRINT "is numbered 1 to 6. The computor's home BOARD" 130 PRINT "is numbered from 19 to 24. To roll the dice," 140 PRINT "hit the 'RETURN' key. The positive numbers are" 150 PRINT "your men and the negative ones are the computors." 160 PRINT "To make a move, enter the position you wish to" 170 PRINT "move from, a comma, and the destination. If you" 180 PRINT "can't move, type '0,1' for your move. If you" 190 PRINT "want to see the board, type '-1,1' for your move." 200 PRINT "To STOP the game, type '0,0' for your move." 240 PRINT 250 PRINT " Would you to see how to see how I value moves"; 260 INPUT (1,0)" (Y/N) ---=>",A$: LET A$=A$+"N" 270 IF A$(1,1)="Y" THEN LET F9=1 ELSE LET F9=0 300 DIM B(10),D(4),H(5),M(9),T(4),X(26),Z(4) 310 REM ...B is blots left 320 REM ...D is dice 330 REM ...H is hits 340 REM ...X is board 350 REM ...T is (proposed) temporary move 360 PRINT : REM ...RANDOMIZE 380 REM ...Set up the board 390 DATA 24,2,19,-5,17,-3,13,5,12,-5,8,3,6,5,1,-2 400 FOR I=1 TO 26: LET X(I)=0: NEXT I 420 FOR I=1 TO 8: READ J,X(J): NEXT I 460 IF RND(0)>.4 THEN LET V1=4 ELSE LET V1=3 470 LET V4=3: IF RND(0)<.1 THEN LET V1=2 480 GOSUB 3770: REM ...Print out board 510 GOSUB 4040: REM ...Roll opening roll 511 PRINT TAB(12);"Computor You" 515 IF D(1)>D(2) THEN PRINT "Computor wins the first move." 520 IF D(1)>D(2) THEN 2340 525 IF D(1)=D(2) THEN PRINT "DRAW. Reshake for first move." 530 IF D(1)=D(2) THEN 510 ELSE 580 550 REM ...Opponent moves now 560 GOSUB 3770 570 GOSUB 4040 580 FOR I=1 TO F: LET H(I)=0: NEXT I 610 LET O1=0 620 LET L=1: REM ...loop 630 IF X(26)=0 THEN 930 640 REM ...Opponent has a man on the bar 650 LET J=1: REM ...J loop 660 LET K=D(J) 670 IF K>6 THEN 690 680 IF X(25-K)>-2 THEN 720 690 LET J=J+1: IF J",J 740 IF J<>-1 THEN 790 750 REM ...Re-display the board and die to move 760 GOSUB 3770 770 GOSUB 4210 780 GOTO 720 790 IF J<1 OR J>24 THEN 870 810 IF X(J)>-2 THEN 840 820 PRINT "I am already there.": GOTO 720 840 FOR I=1 TO F 850 IF D(I)=25-J THEN EXIT 890 860 NEXT I 870 PRINT "You can't do that.": GOTO 720 890 LET X(26)=X(26)-1: LET T(I)=26 910 LET D(I)=D(I)*100: GOTO 1580 930 PRINT "YOUR MOVE (from, to) ---=>"; 940 INPUT I,J 950 IF I>-1 THEN 1000 960 REM ...Re-display the board and die to move 970 GOSUB 3770 980 GOSUB 4210 990 GOTO 930 1000 IF I=0 THEN 1050 1010 IF I>24 OR J>24 THEN 1390 1030 IF J=0 THEN 1660 ELSE 1380 1050 REM ...Opponent can't move any more 1060 IF J=0 THEN 7380 1070 FOR K=1 TO 24 1080 IF X(K)<1 THEN 1150 1090 FOR K1=1 TO F 1100 IF D(K1)>99 THEN 1140 1110 LET T1=D(K1) 1120 IF K-T1<1 THEN 1140 1130 IF X(K-T1)>-2 THEN EXIT 1360 1140 NEXT K1 1150 NEXT K 1160 REM ...Check if he can bear off 1170 FOR K=7 TO 26 1180 IF X(K)>0 THEN EXIT 1340 1190 NEXT K 1200 REM ...May bear off 1210 FOR K1=1 TO F 1220 IF D(K1)>99 THEN 1330 1230 REM ...die K1 to be moved 1240 FOR K=6 TO 1 STEP -1 1250 IF K0 THEN EXIT 1360 1270 NEXT K 1280 FOR K=6 TO 1 STEP -1 1290 IF X(K)<1 THEN 1320 ELSE LET T1=K 1300 EXIT 1360 1320 NEXT K 1330 NEXT K1 1340 LET L=F 1350 GOTO 2010 1360 PRINT "You can move from ";K;" to ";K-T1 1370 GOTO 930 1380 IF I<25 THEN 1410 1390 PRINT "Try again...": GOTO 930 1410 IF X(I)>0 THEN 1440 1420 PRINT "You have nobody on ";I: GOTO 930 1440 IF X(J)>-2 THEN 1480 1450 PRINT "I am already at ";J: GOTO 930 1470 REM ...Get die moved 1480 FOR K=F TO 1 STEP -1 1490 IF (I-J)<>D(K) THEN 1530 ELSE LET D(K)=D(K)*100 1500 LET T(K)=I: EXIT 1570 1530 NEXT K 1540 PRINT "Creative, but wrong.": GOTO 1390 1560 REM ...Move piece from I to J 1570 LET X(I)=X(I)-1 1580 IF X(J)<>-1 THEN 1640 1590 REM ...Hit computor's piece 1600 LET X(25)=X(25)-1: LET O1=O1+1: LET H(O1)=J 1630 LET X(J)=0 1640 LET X(J)=X(J)+1: GOTO 2010 1660 REM ...Check bearing off 1670 FOR K=7 TO 26 1680 IF X(K)>0 THEN EXIT 1980 1690 NEXT K 1700 IF X(I)>0 THEN 1730 1710 PRINT "You have nobody on ";I: GOTO 930 1730 REM ...Bear off 1740 FOR K=F TO 1 STEP -1 1750 IF D(K)=I THEN EXIT 1860 1760 NEXT K 1770 FOR K=I+1 TO 6 1780 IF X(K)>0 THEN EXIT 1840 1790 NEXT K 1800 FOR K=1 TO F 1810 IF D(K)>99 THEN 1830 1820 IF D(K)>I THEN EXIT 1860 1830 NEXT K 1840 PRINT "Count again." 1850 PRINT "You have to bear off with the most distant man." 1855 GOTO 930 1860 LET X(I)=X(I)-1 1870 FOR K1=1 TO 6 1880 IF X(K1)>0 THEN EXIT 1950 1890 NEXT K1 1920 LET O=O+1 1930 PRINT "CONGRATULATIONS.": GOTO 7410 1950 LET T(K)=I: LET D(K)=D(K)*100: GOTO 2010 1980 REM ...Error 1990 PRINT "Not quite yet!": GOTO 930 2010 REM ...Draw tentative move 2020 LET L=L+1: IF L",A$ 2050 LET A$=A$+"Y" 2060 IF A$(1,1)="Y" THEN 2300 2070 IF A$(1,1)="y" THEN 2300 2075 IF A$(1,1)="i" THEN 2090 2080 IF A$(1,1)<>"I" THEN 2040 2090 REM ...Put everything back and re-enter move 2100 FOR I=1 TO F 2110 IF D(I)<100 THEN 2200 2120 LET D(I)=INT(D(I)/100): LET K=D(I) 2140 LET K1=T(I): LET X(K1)=X(K1)+1 2160 IF K1-K<1 THEN 2200 2170 IF K1=26 THEN LET K1=25 2190 LET X(K1-K)=X(K1-K)-1 2200 NEXT I 2210 IF O1=0 THEN 2260 2220 FOR I=1 TO O1: LET X(H(I))=-1: LET X(25)=X(25)+1: NEXT I 2260 GOSUB 3770 2270 GOSUB 4210 2280 PRINT "Re-enter moves.": GOTO 580 2300 REM ...Computor moves now 2310 PRINT 2320 REM ...Roll dice 2330 GOSUB 4070 2340 LET M(9)=-9999999 2350 FOR T1=1 TO F: LET H(T1)=0: NEXT T1 2380 REM ...F2 signals dice have been switched 2390 LET F2=0 2400 REM ...F4 is number of men moved from BAR 2410 LET F4=0 2420 IF X(25)=0 THEN 2790 2430 REM ...Men of BAR 2440 IF X(D(F4+1))<2 THEN 2520 2450 LET J1=F4 2460 IF F4=0 THEN 2480 2470 GOSUB 3290 2480 GOTO 3420 2490 IF F=1 THEN 3550 2500 PRINT "YOU DIRTY RAT!": GOTO 570 2520 REM ...Move from BAR 2530 LET F4=F4+1 2540 REM ...Come in on die F4 2550 LET X(25)=X(25)+1: LET K=D(F4): LET X(K)=X(K)-1 2580 IF X(K)<>0 THEN 2640 2590 FOR K1=1 TO F 2600 IF H(K1)=0 THEN EXIT 2620 2610 NEXT K1 2620 LET H(K1)=K: LET X(K)=-1 2640 LET T(F4)=25: LET J1=F4+1 2660 IF F4<4 THEN 2420 2670 GOSUB 4280 2680 REM ...Special reset 2690 FOR K=1 TO F4 2700 LET K1=D(K): LET X(K1)=X(K1)+1 2720 IF H(K)=0 THEN 2740 2730 LET X(K1)=1: LET X(25)=X(25)-1: LET M(K*2-1)=25 2740 LET M(K*2)=D(K) 2770 NEXT K 2780 GOTO 3550 2790 IF F4<>0 THEN 2820 2800 LET J1=1 2810 REM ...J1 is number of die to be used for the move 2820 LET N=1 2830 REM ...N is used to reference positions on the board 2840 FOR K=1 TO 18 2850 IF X(K)<0 THEN EXIT 2890 2860 NEXT K 2870 REM ...Ready to bear off 2880 GOTO 6840 2890 IF X(N)<=-1 THEN 2980 2900 LET N=N+1 2910 IF N<=24 THEN 2890 2920 REM ...Tried all moves for die J1 given move T(J1-1) 2930 LET J1=J1-1 2940 IF J1<1 THEN 3420 2950 LET N=T(J1)+1 2960 GOSUB 3290 2970 GOTO 2890 2980 REM ...Try to move X(N) 2990 LET K=D(J1) 3000 IF N+K>24 THEN 2930 3010 IF X(N+K)>=2 THEN 2900 3020 REM ...MOVE X(N) 3030 LET T(J1)=N: LET X(N)=X(N)+1: LET X(N+K)=X(K+N)-1 3060 IF X(N+K)<>0 THEN 3090 3070 LET H(J1)=N+K: LET X(N+K)=-1 3090 LET J1=J1+1 3100 IF J1>F THEN 3130 3110 LET N=T(J1-1): GOTO 2840 3130 IF F2T(2) THEN 3230 3190 IF H(1)<>0 THEN 3230 3200 IF T(1)+D(2)>24 THEN 3230 3210 IF X(T(1)+D(2))<2 THEN 3250 3230 REM ...EVALUATE move 3240 GOSUB 4280 3250 LET J1=F: LET N=T(J1)+1 3270 GOSUB 3290: GOTO 2890 3290 REM ...SUBROUTINE to reset board 3300 IF J1<=0 THEN RETURN 3320 LET K1=T(J1): LET X(K1)=X(K1)-1: LET K=D(J1) 3350 IF K1=25 THEN LET K1=0 3370 LET X(K1+K)=X(K1+K)+1 3380 IF H(J1)=0 THEN RETURN 3390 LET X(K1+K)=X(K1+K)+1: LET H(J1)=0: RETURN 3420 IF F2>=F THEN 3500 3430 IF D(1)=D(2) THEN 3500 3440 REM ...Different dice - change their order 3450 LET F2=2: LET K=D(2): LET D(2)=D(1): LET D(1)=K 3490 GOTO 2410 3500 IF M(9)>-9999999 THEN 3550 3510 REM ...Computor can't move with one die 3520 LET F=F-1 3530 IF F>0 THEN 2390 ELSE 2500 3550 PRINT "My move." 3560 FOR I=1 TO F 3570 LET K=I*2-1 3580 IF M(K)<>25 THEN 3620 3590 PRINT "from BAR to ";M(K+1) 3600 LET X(25)=X(25)+1: GOTO 3700 3620 IF M(K+1)<25 THEN 3670 3630 PRINT "Bear off from ";M(K) 3640 LET K=M(K): LET X(K)=X(K)+1: GOTO 3750 3670 PRINT "from ";M(K);" to ";M(K+1) 3680 LET K=M(K): LET X(K)=X(K)+1 3700 LET K=M(I*2): LET X(K)=X(K)-1 3720 IF X(K)<>0 THEN 3750 3730 LET X(26)=X(26)+1: LET X(K)=-1 3750 NEXT I 3760 GOTO 550 3770 REM .....SUBROUTINE to draw the board 3780 PRINT "(0,0 stop game), (0,1 can't move),"; 3785 PRINT " (-1,1 see board)": PRINT 3790 PRINT TAB(13);"<<<===--BACKGAMMON BOARD--===>>>": PRINT 3810 FOR I=13 TO 24 3820 LET K=INT((I-1)/6-2)*2 3830 PRINT TAB((I-12)*4+K);I; 3840 NEXT I 3850 PRINT TAB(60);"BAR" 3860 FOR I=13 TO 24 3870 LET K=INT((I-1)/6-2)*2 3880 PRINT TAB((I-12)*4+K);X(I); 3890 NEXT I 3900 PRINT TAB(60);X(26): PRINT 3920 FOR I=12 TO 1 STEP -1 3930 LET K=INT((12-I)/6)*2 3940 PRINT TAB((13-I)*4+K);X(I); 3950 NEXT I 3960 PRINT TAB(60);X(25) 3970 FOR I=12 TO 1 STEP -1 3980 LET K=INT((12-I)/6)*2 3990 PRINT TAB((13-I)*4+K);I; 4000 NEXT I 4010 PRINT : PRINT : RETURN 4040 REM .....SUBROUTINE to roll dice 4050 INPUT (1,0)" Hit 'RETURN' to roll dice ---=>",A$ 4070 FOR K=1 TO 2 4080 LET D(K)=INT(RND(0)*6)+1 4090 LET K1=INT(RND(0)*10)+1 4100 FOR T1=1 TO K1: LET T2=RND(0): NEXT T1 4130 NEXT K 4140 REM ...Display dice 4150 LET F=2: LET D(3)=0 4170 IF D(1)<>D(2) THEN 4210 4180 LET D(3)=D(1): LET D(4)=D(2): LET F=4 4210 PRINT "DICE:"," "; 4220 FOR K=1 TO 2 4240 IF D(K)<100 THEN PRINT D(K)," "; 4250 NEXT K 4260 PRINT : RETURN 4280 REM ...SUBROUTINE to evaluate moves 4290 LET V=0: REM ...V is the value 4310 REM ...V2 and V3 are used in value formula 4320 LET V2=3.5: LET V3=1 4340 REM ...Value for bearing off or coming in from BAR 4350 FOR K=1 TO F 4360 IF T(K)=0 THEN LET V=V+40*V3 4380 IF T(K)=25 THEN LET V=V+4000 4400 NEXT K 4410 REM ...Check for running game 4420 IF X(25)<>0 THEN 4620 4430 IF X(26)<>0 THEN 4620 4440 FOR I=1 TO F 4450 IF H(I)<>0 THEN EXIT 4620 4460 NEXT I 4470 FOR I=24 TO 1 STEP -1 4480 IF X(I)>0 THEN EXIT 4500 4490 NEXT I 4500 FOR T1=I TO 1 STEP -1 4510 IF X(T1)<0 THEN EXIT 4620 4520 NEXT T1 4530 REM ...Running game 4540 LET V2=0: LET V3=5 4560 REM ...Penalty to get computor to avoid BACKGAMMON 4570 FOR I=1 TO 6 4580 IF X(I)<0 THEN LET V=V-1000*ABS(X(I))*(7-I) 4600 NEXT I 4610 GOTO 6430 4620 REM ...Not running game 4630 REM ...Fill B with blots 4640 LET C1=0 4650 FOR I=1 TO 24 4660 IF X(I)=-1 THEN LET C1=C1+1 ELSE 4690 4670 LET B(C1)=1 4690 NEXT I 4700 REM ...C1 has number of blots; B has location 4710 REM ...Ready to get value of move 4720 REM ...T1 has # of points on computor's home board 4730 REM ...T2 has # of blots on computor's home board 4740 REM ...T3 has # of points on opponent's home board 4750 REM ...T4 has willingness to hit 4760 REM ...T5 has # of men on BAR 4770 LET T1=0: LET T2=0: LET T3=.3: LET T5=0 4810 REM ...Number of points in home board (or near) 4820 FOR J=17 TO 24 4830 IF X(J)>-2 THEN 4880 4840 LET T1=T1+1 4850 REM ...Adjustments for points outside of home board 4860 IF J<=18 THEN LET T1=T1-.3 4880 IF X(J)=-1 THEN LET T2=T2+1 4900 REM ...Penalty for building past 21 4910 IF J<=21 OR X(J)>=0 THEN 4940 4930 LET V=V+30*X(J) 4940 NEXT J 4950 LET V=V+T1^V2 4960 REM ...Number of points on or near opponent's home board 4970 FOR J=1 TO 8 4980 IF X(J)>=2 THEN LET T3=T3+1 5000 NEXT J 5010 REM ...REWARD for protectingoutside board 5020 FOR J=13 TO 18 5030 IF X(J)<0 THEN LET V=V+ABS(X(J))*V2 5050 NEXT J 5060 LET T1=T1^V1 5070 LET T3=T3^V1 5080 REM ...Value of a HIT 5090 FOR J=1 TO F 5100 IF H(J)=0 THEN 5130 ELSE LET T5=T5+1 5110 LET V=V+(25-H(J))*T1*11/36 5130 NEXT J 5140 LET T5=T5+X(26) 5150 IF T5<4 THEN 5180 5160 REM ...Subtract value of blots that can be HIT on entrance 5170 LET V=V-11/36*T2*T3 5180 REM ...Added most value to V 5190 IF F9=1 OR C1<=0 THEN 5250 5210 LET V=V+300 5220 IF V3 OR C1=0 THEN 6130 5320 REM ...Have C1 blots to evaluate 5330 FOR J=1 TO C1 5340 FOR K=B(J)+1 TO 26 5350 LET C=0 5360 IF K<26 THEN 5400 5370 LET K1=1: REM ...loop 5380 IF H(K1)<>0 THEN 5410 5390 LET K1=K1+1: IF K12 THEN 5650 5490 LET T4=T4-1 5500 LET K1=K-1: REM ...loop (k1=k-1 to k-6 STEP -1) 5510 IF K1<1 THEN 5600 5520 IF X(K1)=-1 THEN LET T4=T4+11+K-K1 5540 LET K1=K1-1: IF K1>K-7 THEN 5510 5550 LET K1=K-7: REM ...loop (k1=k-7 to k-11 STEP -1) 5560 IF K1<1 THEN 5600 5570 IF X(K1)=-1 THEN LET T4=T4+2 5590 LET K1=K1-1: IF K1>K-12 THEN 5560 5600 LET T4=(36-T4)/36*B(J)/12 5610 IF T4<0 THEN LET T4=.15 5630 IF T4>=1 THEN LET T4=1 5650 REM ...D is the difference 5660 LET D=K-B(J) 5670 IF K>=26 THEN LET D=D-1 5690 IF T5>0 THEN 5910 5700 IF D=1 THEN 5920 5710 IF D>11 THEN 5980 5720 REM ...To HIT with 2 dice 5730 IF B(J)>13 THEN 5730 5740 IF X(26)<>0 THEN 5920 5750 LET D1=1 5760 LET D2=D-D1 5770 IF D2<=6 THEN 5800 5780 LET D1=D1+1: GOTO 5760 5800 IF K-D1<=0 THEN 5840 5810 IF X(K-D1)<0 THEN 5840 5820 LET C=C+2: GOTO 5870 5840 IF K-D2<=0 THEN 5870 5850 IF X(K-D2)<0 THEN 5870 5860 LET C=C+2 5870 IF D2-D1<=1 THEN 5910 5880 LET D1=D1+1: LET D2=D2-1: GOTO 5800 5910 IF D>6 THEN 5980 5920 REM ...Can HIT with 1 die 5930 IF B(J)>18 THEN 5950 5940 IF T5>1 THEN 5970 5950 LET C=C+11: GOTO 5980 5970 LET C=C+1 5980 REM ..Hit with doubles 5990 LET D2=3 6000 IF INT(D/D2)*D2<>D THEN 6060 6010 LET D1=0: LET D1=D1+D/D2 6030 IF K-D1<1 THEN 6060 6040 IF X(K-D1)>1 THEN 6060 6050 LET C=C+1 6060 IF D2<>3 THEN 6090 6070 LET D2=4: GOTO 6000 6090 REM ...C has all ways B(J) can be hit from K 6100 LET V=V-C/36*B(J)*T3*T4 6110 NEXT K 6120 NEXT J 6130 REM ...check for primes 6140 LET T1=0: LET T2=0 6160 FOR K=16 TO 23 6170 IF X(K+1)<=-2 THEN LET T1=T1+1 6190 IF T10 THEN LET T3=T3+X(J) 6280 NEXT J 6290 LET V=V+T2*T2*T3 6300 IF X(K+1)>=-1 THEN LET T1=0 6320 NEXT K 6330 REM ...Special value for building 5-7 and 18-20 6340 LET L=5 6350 FOR K=L TO L+2 6360 LET V=V-X(K)*V2*30 6370 IF X(K)<=-3 THEN LET V=V+X(K)*V2*30+90 6390 NEXT K 6400 IF L>=18 THEN 6430 6410 LET L=18: GOTO 6350 6430 REM ...Get number of points and number with excess 6460 REM ...T3 is # of points with at least 3 men 6470 REM ...T4 is how far to move to get to home board 6480 LET T1=0: LET T2=0: LET T3=0: LET T4=0 6520 FOR J=1 TO 24 6530 IF X(J)>=0 THEN 6620 ELSE LET T1=T1+1 6550 IF J>=19 THEN 6570 6560 LET T4=T4+(19-J)*ABS(X(J))+(3-INT((J-1)/6))*3*ABS(X(J)) 6570 IF X(J)>-2 THEN 6620 ELSE LET T2=T2+1 6590 REM ...If 3 men on point, reward. If more, penalty 6600 IF X(J)<=-3 THEN LET T3=T3-(X(J)*X(J))+12 6620 NEXT J 6630 LET T2=T2*V2 6640 LET V=V+T1+V2*T2+V2*T3-V3*T4 6650 IF F9=0 THEN 6700 6660 FOR K=1 TO F 6670 PRINT T(K);T(K)+D(K); 6680 NEXT K 6690 PRINT " ",V 6700 IF V<=M(9) THEN 6830 6710 FOR J=1 TO F 6720 IF T(J)<>0 THEN 6760 6730 LET M((J-1)*2+1)=Z(J): LET M(J*2)=28: GOTO 6810 6760 LET M((J-1)*2+1)=T(J) 6770 IF T(J)=25 THEN 6800 6780 LET M(J*2)=T(J)+D(J): GOTO 6810 6800 LET M(J*2)=D(J) 6810 NEXT J 6820 LET M(9)=V 6830 RETURN 6840 REM ...Subroutine to bear off 6850 FOR K=1 TO F: LET Z(K)=0: NEXT K 6880 FOR K=J1 TO F 6890 LET K1=25-D(K) 6900 IF X(K1)<0 THEN 7040 6910 LET T1=19: REM ...loop 6920 IF X(T1)<0 THEN EXIT 7310 6930 LET T1=T1+1: IF T10 THEN 7250 7130 FOR K=19 TO 24 7140 IF X(K)>0 THEN EXIT 7250 7150 NEXT K 7160 FOR K=1 TO F 7170 IF T(K)>0 THEN EXIT 7250 7180 NEXT K 7190 FOR K=1 TO F 7200 LET X(Z(K))=X(Z(K))-1: LET M(K*2-1)=Z(K): LET M(K*2)=27 7230 NEXT K 7240 GOTO 3550 7250 REM ...Ready to evaluate, see if already evaluated 7260 IF T(1)>0 OR T(2)>0 OR F2"; 7450 INPUT (1,0)A$: LET A$=A$+"N" 7460 IF A$(1,1)="N" THEN 7500 7470 RESTORE 7480 GOTO 380 7500 END