Towers of Hanoi: Difference between revisions
Content added Content deleted
(→{{header|XQuery}}: Added zkl) |
({{out}}) |
||
Line 260: | Line 260: | ||
& move$(4,1,2,3) |
& move$(4,1,2,3) |
||
);</lang> |
);</lang> |
||
{{out}} |
|||
Output: |
|||
<pre>Move disk from pole 1 to pole 3 |
<pre>Move disk from pole 1 to pole 3 |
||
Move disk from pole 1 to pole 2 |
Move disk from pole 1 to pole 2 |
||
Line 1,000: | Line 1,000: | ||
moveStack(STACK.A, STACK.C)</lang> |
moveStack(STACK.A, STACK.C)</lang> |
||
{{out}} |
|||
Output: |
|||
<pre style="height:30ex;overflow:scroll;">A: [( ), O, o, °] |
<pre style="height:30ex;overflow:scroll;">A: [( ), O, o, °] |
||
B: [] |
B: [] |
||
Line 1,066: | Line 1,066: | ||
=={{header|Haskell}}== |
=={{header|Haskell}}== |
||
Most of the programs on this page use an imperative approach |
Most of the programs on this page use an imperative approach |
||
(i.e., print out movements as side effects during program execution). |
|||
Haskell favors a purely functional approach, where you would for example return a (lazy) list of movements from a to b via c: |
|||
<lang haskell>hanoi :: Integer -> a -> a -> a -> [(a, a)] |
<lang haskell>hanoi :: Integer -> a -> a -> a -> [(a, a)] |
||
hanoi 0 _ _ _ = [] |
hanoi 0 _ _ _ = [] |
||
Line 1,282: | Line 1,284: | ||
Called from command line: |
Called from command line: |
||
<lang Lasso>./towers</lang> |
<lang Lasso>./towers</lang> |
||
{{out}} |
|||
Output: |
|||
<pre>Move disk from A to C |
<pre>Move disk from A to C |
||
Move disk from A to B |
Move disk from A to B |
||
Line 1,292: | Line 1,294: | ||
Called from command line: |
Called from command line: |
||
<lang Lasso>./towers 4</lang> |
<lang Lasso>./towers 4</lang> |
||
{{out}} |
|||
Output: |
|||
<pre>Move disk from A to B |
<pre>Move disk from A to B |
||
Move disk from A to C |
Move disk from A to C |
||
Line 1,399: | Line 1,401: | ||
end</lang> |
end</lang> |
||
{{out|Sample output}} |
{{out|Sample output}} |
||
< |
<pre>towerOfHanoi(3,1,3,2) |
||
Move plate 1 from tower 1 to tower 3 |
Move plate 1 from tower 1 to tower 3 |
||
Move plate 2 from tower 1 to tower 2 |
Move plate 2 from tower 1 to tower 2 |
||
Line 1,406: | Line 1,408: | ||
Move plate 1 from tower 2 to tower 1 |
Move plate 1 from tower 2 to tower 1 |
||
Move plate 2 from tower 2 to tower 3 |
Move plate 2 from tower 2 to tower 3 |
||
Move plate 1 from tower 1 to tower 3</ |
Move plate 1 from tower 1 to tower 3</pre> |
||
=={{header|МК-61/52}}== |
=={{header|МК-61/52}}== |
||
Line 1,943: | Line 1,945: | ||
} |
} |
||
}</lang> |
}</lang> |
||
{{out}} |
|||
Output |
|||
<lang rascal>rascal>hanoi(4,1,3) |
<lang rascal>rascal>hanoi(4,1,3) |
||
Move disk 1 from peg 1 to peg 2 |
Move disk 1 from peg 1 to peg 2 |
||
Line 2,089: | Line 2,091: | ||
The minimum number of moves to solve a 3 ring Tower of Hanoi is 7. |
The minimum number of moves to solve a 3 ring Tower of Hanoi is 7. |
||
</pre> |
</pre> |
||
{{out}}when the following was entered (to solve with four disks): <tt>4</tt> |
|||
<pre style="height:25ex;overflow:scroll"> |
<pre style="height:25ex;overflow:scroll"> |
||
step 1: move disk 1 ──► 2 |
step 1: move disk 1 ──► 2 |
||
Line 2,504: | Line 2,506: | ||
hanoi hanoi = eq(n,0) 1 :s(return) |
hanoi hanoi = eq(n,0) 1 :s(return) |
||
hanoi(n - 1, src, tmp, trg) |
hanoi(n - 1, src, tmp, trg) |
||
count = count + 1 |
count = count + 1 |
||
output = count ': Move disc from ' src ' to ' trg |
output = count ': Move disc from ' src ' to ' trg |
||
hanoi(n - 1, tmp, trg, src) :(return) |
hanoi(n - 1, tmp, trg, src) :(return) |
||
Line 2,796: | Line 2,798: | ||
MoveTower(3, "left", "right", "center")</lang> |
MoveTower(3, "left", "right", "center")</lang> |
||
{{out}} |
|||
Output: |
|||
<pre> |
<pre> |
||
Move from left peg to right peg. |
Move from left peg to right peg. |