Towers of Hanoi: Difference between revisions

Content added Content deleted
({{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 (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:
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}}
<lang MATLAB>towerOfHanoi(3,1,3,2)
<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</lang>
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>
'''output''' when the following was entered (to solve with four disks): <tt>4</tt>
{{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.