Towers of Hanoi: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
(→{{header|AppleScript}}: Added alternative example.) |
||
Line 288: | Line 288: | ||
mid -> right |
mid -> right |
||
left -> right</pre> |
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}}== |
=={{header|Arturo}}== |