10 DEFINT A-Z 20 DIM P(2,7),S(3,16) 30 GOSUB 1000 40 GOSUB 1100:GOSUB 1200:GOSUB 1300 50 GOTO 40 1000 SCREEN 0,0:CLS:PRINT "Towers of Hanoi":RETURN 1100 PRINT @240,"How many disks (ENTER TO EXIT)? "; 1110 C$=INPUT$(1) 1120 IF C$=CHR$(13) THEN PRINT:PRINT:MENU 1130 IF C$<"1" OR C$>"7" THEN 1100 1140 PRINT C$;:N=ASC(C$)-48 1150 RETURN 1200 CLS:GOSUB 1000:T=40-3*N 1215 LINE (40,T+1)-(40,40),1 1220 LINE (120,T+1)-(120,40),1 1225 LINE (200,T+1)-(200,40),1 1230 LINE(0,41)-(239,44),1,BF 1235 P(0,0)=40:P(1,0)=120:P(2,0)=200 1240 D=1:C=40:FOR I=1 TO N:R=41-3*I:S=N+1-I:GOSUB 2000:P(0,I)=S:P(1,I)=0:P(2,I)=0:NEXT I 1250 MV=0 1260 RETURN 1300 S(0,0)=N:S(1,0)=0:S(2,0)=1:S(3,0)=2:IS=0 1305 IF IS<0 THEN RETURN 1310 IF S(0,IS)=1 THEN GOSUB 2100:IS=IS-1:GOTO 1305 1320 S(0,IS+2)=S(0,IS)-1:S(1,IS+2)=S(1,IS):S(2,IS+2)=S(3,IS):S(3,IS+2)=S(2,IS) 1325 S(0,IS+1)=1:S(1,IS+1)=S(1,IS):S(2,IS+1)=S(2,IS) 1330 S(0,IS)=S(0,IS)-1:S(1,IS)=S(3,IS):S(3,IS)=S(1,IS+1) 1335 IS=IS+2:GOTO 1310 2000 L=5*S 2010 LINE(C-L-1,R)-(C-2,R+1),D,BF 2020 LINE(C+2,R)-(C+L+1,R+1),D,BF 2030 RETURN 2100 P1=S(1,IS):P2=S(2,IS) 2110 FOR I=N TO 1 STEP -1 2120 IF P(P1,I)<>0 THEN 2140 2130 NEXT I 2140 S=P(P1,I):C1=P(P1,0):C2=P(P2,0):C=C1:P(P1,I)=0 2150 FOR J=38-3*I TO T-2 STEP -3 2160 R=J:D=1:GOSUB 2000:R=J+3:D=0:GOSUB 2000 2170 NEXT J 2180 R=T-2:L=5*S:D=1 2190 IF C1239 THEN IC=239 2215 LINE(IC,R)-(C-K*(1+L),R+1),0,BF 2220 GOSUB 2000 2230 NEXT C 2240 FOR I=1 TO N 2250 IF P(P2,I)=0 THEN 2270 2260 NEXT I 2270 P(P2,I)=S:C=C2 2280 FOR J=T+1 TO 41-3*I STEP 3 2290 R=J:D=1:GOSUB 2000:R=J-3:D=0:GOSUB 2000:NEXT J 2300 MV=MV+1:PRINT @280,"Move: ";:PRINT USING "####";MV; 2310 RETURN