Files
gw-basic-2026/tests/programs/hanoi.bas
Eremey Valetov 691031a7f9 Fix RESTORE with line number, add 8 Rosetta Code test programs
RESTORE n now correctly positions past the DATA token so the next
READ gets actual values instead of the token byte.

New tests: Roman numerals, Luhn validator, Towers of Hanoi, 100 Doors,
Pascal's triangle, type declarations, Hailstone sequence, multiplication
table.  50 tests now pass.
2026-02-15 16:22:55 -05:00

23 lines
1010 B
QBasic

10 REM Towers of Hanoi - iterative with explicit stack - Rosetta Code
20 NDISKS = 4
30 DIM SN(50), SF(50), ST(50), SV(50)
40 SP = 0
50 REM Push initial call: move NDISKS from A to C via B
60 SP = SP + 1 : SN(SP) = NDISKS : SF(SP) = 1 : ST(SP) = 3 : SV(SP) = 2
70 MOVES = 0
80 IF SP = 0 THEN 200
90 N = SN(SP) : F = SF(SP) : T = ST(SP) : V = SV(SP) : SP = SP - 1
100 IF N = 0 THEN 80
110 REM Push move(N-1, via, to, from) - this goes on stack FIRST (executed LAST)
120 SP = SP + 1 : SN(SP) = N-1 : SF(SP) = V : ST(SP) = T : SV(SP) = F
130 REM Push the actual move of disk N from F to T (sentinel N=0 above it)
140 SP = SP + 1 : SN(SP) = 0 : SF(SP) = F : ST(SP) = T : SV(SP) = 0
150 MOVES = MOVES + 1
160 REM Push move(N-1, from, via, to)
170 SP = SP + 1 : SN(SP) = N-1 : SF(SP) = F : ST(SP) = V : SV(SP) = T
180 GOTO 80
200 REM Should be 2^NDISKS - 1 = 15 moves
210 EXPECTED = 2^NDISKS - 1
220 IF MOVES <> EXPECTED THEN PRINT "FAIL: expected"; EXPECTED; "got"; MOVES : END
230 PRINT "Hanoi OK:"; MOVES; "moves"