Towers of Hanoi: Difference between revisions
Content added Content deleted
(→{{header|ALGOL W}}: Added alternative iterative version based on the Tiny BASIC sample) |
|||
Line 414: | Line 414: | ||
=={{header|ALGOL W}}== |
=={{header|ALGOL W}}== |
||
===Recursive=== |
|||
Following Agena, Algol 68, AmigaE... |
Following Agena, Algol 68, AmigaE... |
||
<lang |
<lang pascal>begin |
||
procedure move ( integer value n, from, to, via ) ; |
procedure move ( integer value n, from, to, via ) ; |
||
if n > 0 then begin |
if n > 0 then begin |
||
Line 424: | Line 425: | ||
move( 4, 1, 2, 3 ) |
move( 4, 1, 2, 3 ) |
||
end.</lang> |
|||
===Iterative=== |
|||
{{Trans|Tiny BASIC}} |
|||
<lang pascal>begin % iterative towers of hanoi - translated from Tiny Basic % |
|||
integer d, n; |
|||
while begin writeon( "How many disks? " ); |
|||
read( d ); |
|||
d < 1 or d > 10 |
|||
end |
|||
do begin end; |
|||
n := 1; |
|||
while d not = 0 do begin |
|||
d := d - 1; |
|||
n := 2 * n |
|||
end; |
|||
for x := 1 until n - 1 do begin |
|||
integer s, t; |
|||
% Algol W has the necessary bit and modulo operators so these are used here % |
|||
% instead of implementing them via subroutines % |
|||
s := number( bitstring( x ) and bitstring( x - 1 ) ) rem 3; |
|||
t := ( number( bitstring( x ) or bitstring( x - 1 ) ) + 1 ) rem 3; |
|||
write( i_w := 1, s_w := 0, "Move disc on peg ", s + 1, " to peg ", t + 1 ) |
|||
end |
|||
end.</lang> |
end.</lang> |
||