Towers of Hanoi: Difference between revisions

→‎{{header|AppleScript}}: Added alternative example.
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
(→‎{{header|AppleScript}}: Added alternative example.)
Line 288:
mid -> right
left -> right</pre>
----
More illustratively:
 
<lang applescript>on hanoi(n)
set t1 to tab & "tower 1: " & tab
set t2 to tab & "tower 2: " & tab
set t3 to tab & "tower 3: " & tab
script o
property m : 0
property tower1 : {}
property tower2 : {}
property tower3 : {}
property towerRefs : {a reference to tower1, a reference to tower2, a reference to tower3}
property process : missing value
on |move|(n, source, target, aux)
if (n > 0) then
|move|(n - 1, source, aux, target)
set sourceTowerRef to item source of my towerRefs
set end of item target of my towerRefs to end of sourceTowerRef
set sourceTowerRef's contents to reverse of rest of reverse of sourceTowerRef
set m to m + 1
set end of my process to ¬
{(m as text) & ". move disc " & n & (" from tower " & source) & (" to tower " & target & ":"), ¬
t1 & tower1, ¬
t2 & tower2, ¬
t3 & tower3}
|move|(n - 1, aux, target, source)
end if
end |move|
end script
repeat with i from n to 1 by -1
set end of o's tower1 to i
end repeat
set astid to AppleScript's text item delimiters
set AppleScript's text item delimiters to ", "
set o's process to {"Starting with " & n & " discs on tower 1:", t1 & o's tower1, t2, t3}
tell o to |move|(n, 1, 2, 3)
set end of o's process to "That's it!"
set AppleScript's text item delimiters to linefeed
set process to o's process as text
set AppleScript's text item delimiters to astid
return process
end hanoi
 
-- Test:
hanoi(3)</lang>
 
{{Out}}
<pre>"Starting with 3 discs on tower 1:
tower 1: 3, 2, 1
tower 2:
tower 3:
1. move disc 1 from tower 1 to tower 2:
tower 1: 3, 2
tower 2: 1
tower 3:
2. move disc 2 from tower 1 to tower 3:
tower 1: 3
tower 2: 1
tower 3: 2
3. move disc 1 from tower 2 to tower 3:
tower 1: 3
tower 2:
tower 3: 2, 1
4. move disc 3 from tower 1 to tower 2:
tower 1:
tower 2: 3
tower 3: 2, 1
5. move disc 1 from tower 3 to tower 1:
tower 1: 1
tower 2: 3
tower 3: 2
6. move disc 2 from tower 3 to tower 2:
tower 1: 1
tower 2: 3, 2
tower 3:
7. move disc 1 from tower 1 to tower 2:
tower 1:
tower 2: 3, 2, 1
tower 3:
That's it!"</pre>
 
=={{header|Arturo}}==
557

edits