7 my @list = map { $key * $_ } <>;
8 my @perm = ( 0 .. $#list );
11 for my $idx (0 .. $#list) {
12 my $move = $list[$idx];
14 $pos++ while $perm[$pos] != $idx;
15 splice(@perm, $pos, 1);
16 my $dst = ($pos + $move) % @perm;
17 splice(@perm, $dst, 0, $idx);
21 my @ordered = map { $list[$perm[$_]] } 0 .. $#list;
24 $i++ while $ordered[$i] != 0;