use strict; my @one = (1..10); ## Sample set my %point; my ($x,$y); my $total=0; for $x (@one) { $total++; { ## Pick any list element but $x: redo while ($y = $one[rand @one]) eq $x; ## Special case: nobody left to point to if ($total==@one && !$point{$x}) { $total = $point{$y}; ## Recycling $total $point{$y}=$x; $point{$x}=$total; last; } redo if $point{$y}; $point{$y}=$x; } } print "$x => $point{$x}\n" while $x=$one[$x++];
In reply to Swap-a-roo by turnstep
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |