note
jlongino
If this were homework (but of course it's not), I imagine a
teacher would be very impressed if one of their students
developed a uniquely Perl solution. Instead of trying to
move elements around one at a time, come up with an
algorithm to swap at least two elements.
<p>
For example, with Perl you could solve this specific
problem with the following two statements:
<code>
($slots[1], $slots[2]) = ($slots[2], $slots[1]);
($slots[2], $slots[3]) = ($slots[3], $slots[2]);
</code>
and, of course, with one statement:
<code>
($slots[1], $slots[2], $slots[3]) = ($slots[2], $slots[3], $slots[1]);
</code>
Coming up with an algorithm for two in-place swaps shouldn't
be too difficult (I've already shown you the Perl idiom),
++ if you can handle more than two elements at a time.
<P>--Jim
<p><b>Update:</b> Well, that's the <i>algorithm</i> part I
alluded to, your list of moves for the 2-element swap would
look like this:
<ul>
<li>swap(1, 2)
<li>swap(2, 3)
</ul>
Granted trying to notate a 3 at-a-time swap would be
difficult, if even possible (thus the ++).
<p>
If we'd known that you had to use a one-armed robot to
begin with, the replies might have been more useful. ;)
144470
144470