- my $move = $list[$idx];
- my $pos = 0;
- $pos++ while $perm[$pos] != $idx;
- splice(@perm, $pos, 1);
- my $dst = ($pos + $move) % @perm;
- splice(@perm, $dst, 0, $idx);
+ my $i = 0;
+ $i++ while $list[$i][0] != $idx;
+ my $item = splice @list, $i, 1;
+ my $dest = ($item->[1] + $i) % @list;
+ splice @list, $dest, 0, $item;