Towers of Hanoi: Difference between revisions

(→‎{{header|Kotlin}}: Updated example see https://github.com/dkandalov/rosettacode-kotlin for details)
Line 2,618:
hanoi $n - 1, $c, $b, $a;
}</lang>
 
=={{header|Phix}}==
<lang Phix>constant poles = {"left","middle","right"}
enum left, middle, right
 
sequence disks
integer moves
procedure showpegs(integer src, integer dest)
string desc = sprintf("%s to %s:",{poles[src],poles[dest]})
disks[dest] &= disks[src][$]
disks[src] = disks[src][1..$-1]
for i=1 to length(disks) do
printf(1,"%-16s | %s\n",{desc,join(sq_add(disks[i],'0'),' ')})
desc = ""
end for
printf(1,"\n")
moves += 1
end procedure
 
procedure hanoir(integer n, src=left, dest=right, via=middle)
if n>0 then
hanoir(n-1, src, via, dest)
showpegs(src,dest)
hanoir(n-1, via, dest, src)
end if
end procedure
 
procedure hanoi(integer n)
disks = {reverse(tagset(n)),{},{}}
moves = 0
hanoir(n)
printf(1,"completed in %d moves\n",{moves})
end procedure
 
hanoi(3)</lang>
{{Out}}
<pre style="float:left">
left to right: | 3 2
|
| 1
 
left to middle: | 3
| 2
| 1
 
right to middle: | 3
| 2 1
|
 
left to right: |
| 2 1
| 3
 
middle to left: | 1
| 2
| 3
 
middle to right: | 1
|
| 3 2
 
left to right: |
|
| 3 2 1
 
completed in 7 moves
</pre>
<pre style="float:left">
left to middle: | 4 3 2
| 1
|
 
left to right: | 4 3
| 1
| 2
 
middle to right: | 4 3
|
| 2 1
 
 
...
 
 
left to middle: | 2
| 1
| 4 3
 
left to right: |
| 1
| 4 3 2
 
middle to right: |
|
| 4 3 2 1
 
completed in 15 moves
</pre>
<pre style="float:left">
left to right: | 5 4 3 2
|
| 1
 
left to middle: | 5 4 3
| 2
| 1
 
right to middle: | 5 4 3
| 2 1
|
 
 
...
 
 
middle to left: | 1
| 2
| 5 4 3
 
middle to right: | 1
|
| 5 4 3 2
 
left to right: |
|
| 5 4 3 2 1
 
completed in 31 moves
</pre>
<pre>
left to middle: | 6 5 4 3 2
| 1
|
 
left to right: | 6 5 4 3
| 1
| 2
 
middle to right: | 6 5 4 3
|
| 2 1
 
 
...
 
 
left to middle: | 2
| 1
| 6 5 4 3
 
left to right: |
| 1
| 6 5 4 3 2
 
middle to right: |
|
| 6 5 4 3 2 1
 
completed in 63 moves
</pre>
 
=={{header|PHL}}==
7,820

edits