1 REM Ins{nd av Peter M|rtsell-Vince <1343> 1989-09-16 20.45.14 (DUMP) 10 ! -------------------------------------------------! 30 ! Tower of Hanoi ! 40 ! ============== ! 60 ! Av <1343> Peter M|rtsell ! 70 ! (med reservation f|r ev. f|reg}ngare) ! 80 ! 1989 - 09 - 16 ! 90 ! -------------------------------------------------! 100 INTEGER 110 EXTEND 120 ; 'Ange antal i f|rsta h|gen';: INPUT Antal 130 Z=FNInit 140 Z=FNFlytta(Antal,1,3) 150 END 160 ;; 170 DEF FNFlytta(N,A,B) LOCAL C 180 C=6-A-B 190 IF N>0 THEN 200 Z=FNFlytta(N-1,A,C) 210 Z=FNMove(A,B) 220 Z=FNFlytta(N-1,C,B) 230 IFEND 240 RETURN 0 250 FNEND 260 ;; 270 DEF FNInit 280 Drag=0 290 DIM Tower(3,Antal) 300 FOR I=1 TO Antal 310 Tower(1,I)=Antal-I+1 320 NEXT I 330 Tower(1,0)=Antal 340 PRINT CLS 350 PRINT "Hanois torn Antal drag som kr{vs" 2^Antal-1 360 PRINT "=========== Antal klara drag" 370 FOR I=1 TO Antal 380 ; CUR(22-I,10) Tower(1,I); 390 NEXT I 400 ; CUR(22.,10.) 'Torn 1' CUR(22.,30.) 'Torn 2' CUR(22.,50.) 'Torn 3' 410 RETURN 0. 420 FNEND 430 ;; 440 DEF FNMove(A,B) LOCAL Temp,T$=1 450 Drag=Drag+1 460 ; CUR(2,38) Drag; 470 ! GET T$ 480 PRINT CUR(22-Tower(A,0),A*20-10) ' '; 490 Temp=Tower(A,Tower(A,0)) 500 Tower(B,Tower(B,0)+1)=Temp 510 Tower(A,Tower(A,0))=0 520 Tower(A,0)=Tower(A,0)-1 530 Tower(B,0)=Tower(B,0)+1 540 PRINT CUR(22-Tower(B,0),B*20-10) Temp; 550 RETURN 0 560 FNEND