Your right. My code, both my offered solution and my benchmark, are deficient. I'll keep my excuses and offer a revised solution, which I believe I have fully verified for compatability with the results of your original.

The code below runs the remove_item(s) subs against the test data for all possible $index values and compares the results against each other (yours and mine). It also benchmarks each for all input criteria and the results are that my new version now averages a tad under a third (32.9%) faster across all situations.

I hope you find this useful.

sub remove_items { my ($i, %del) = (0); @del{@_} = undef; @items = grep { !exists $del{$_} and ++$i or $index -= ($i <= $index), 0 } @items; }

The code for the full verification and the benchmark result (on my poor li'l 233MHz :) are below

#! perl -sw use strict; use Benchmark; my @i = qw( a b c x d e f a g h i j k l z m n o p q r t s t b u v w x +y z ); my @dups = qw( x a z t b ); my $index; my @items = @i; sub remove_item { my %del = map { $_ => 1 } @_; my @part_1 = grep { !exists $del{$_} } @items[0..$index]; my @part_2 = grep { !exists $del{$_} } @items[$index+1..$#items]; $index = $#part_1; @items = (@part_1, @part_2); } sub remove_items { my ($i, %del) = (0); @del{@_} = undef; @items = grep { !exists $del{$_} and ++$i or $index -= ($i <= $ind +ex), 0 } @items; } for my $start ( 0..$#items ) { @items = @i; $index=$start; remove_item @dups; my $dpuuResults = "$index:$items[$index]:@items\n"; @items = @i; $index=$start; remove_items @dups; my $BUKResults = "$index:$items[$index]:@items\n"; print "Mismatch: dpuu gave:\n$dpuuResults\nBUK gave: $BUKResults\n +" if $dpuuResults ne $BUKResults; Benchmark::cmpthese( 1000, { BrowserUk => sub { @items = @i; $index=$start; remove_items @dup +s; }, dpuu => sub { @items = @i; $index=$start; remove_item @du +ps; }, }); } __DATA__ C:\test>195796 30 Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +83.33/s (n=1000) dpuu: 1 wallclock secs ( 0.63 usr + 0.00 sys = 0.63 CPU) @ 15 +87.30/s (n=1000) Rate dpuu BrowserUk dpuu 1587/s -- -24% BrowserUk 2083/s 31% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.47 usr + 0.00 sys = 0.47 CPU) @ 21 +23.14/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -28% BrowserUk 2123/s 38% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.47 usr + 0.00 sys = 0.47 CPU) @ 21 +23.14/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -28% BrowserUk 2123/s 38% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20 +36.66/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +38.46/s (n=1000) Rate dpuu BrowserUk dpuu 1538/s -- -24% BrowserUk 2037/s 32% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +83.33/s (n=1000) dpuu: 1 wallclock secs ( 0.66 usr + 0.00 sys = 0.66 CPU) @ 15 +12.86/s (n=1000) Rate dpuu BrowserUk dpuu 1513/s -- -27% BrowserUk 2083/s 38% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20 +36.66/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -25% BrowserUk 2037/s 33% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20 +36.66/s (n=1000) dpuu: 0 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -25% BrowserUk 2037/s 33% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +83.33/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -26% BrowserUk 2083/s 36% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20 +36.66/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -25% BrowserUk 2037/s 33% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +79.00/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -26% BrowserUk 2079/s 35% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +79.00/s (n=1000) dpuu: 0 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +62.50/s (n=1000) Rate dpuu BrowserUk dpuu 1562/s -- -25% BrowserUk 2079/s 33% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20 +36.66/s (n=1000) dpuu: 1 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -23% BrowserUk 2037/s 31% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +79.00/s (n=1000) dpuu: 0 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -26% BrowserUk 2079/s 35% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.50 usr + 0.00 sys = 0.50 CPU) @ 19 +96.01/s (n=1000) dpuu: 1 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -22% BrowserUk 1996/s 28% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +83.33/s (n=1000) dpuu: 1 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -25% BrowserUk 2083/s 34% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20 +36.66/s (n=1000) dpuu: 1 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -23% BrowserUk 2037/s 31% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +79.00/s (n=1000) dpuu: 0 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -25% BrowserUk 2079/s 33% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20 +40.82/s (n=1000) dpuu: 1 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -24% BrowserUk 2041/s 31% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.47 usr + 0.00 sys = 0.47 CPU) @ 21 +23.14/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -28% BrowserUk 2123/s 38% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20 +36.66/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -25% BrowserUk 2037/s 33% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.50 usr + 0.00 sys = 0.50 CPU) @ 19 +96.01/s (n=1000) dpuu: 1 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -22% BrowserUk 1996/s 28% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +83.33/s (n=1000) dpuu: -1 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -25% BrowserUk 2083/s 34% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +79.00/s (n=1000) dpuu: 0 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -26% BrowserUk 2079/s 35% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.47 usr + 0.00 sys = 0.47 CPU) @ 21 +23.14/s (n=1000) dpuu: 1 wallclock secs ( 0.66 usr + 0.00 sys = 0.66 CPU) @ 15 +12.86/s (n=1000) Rate dpuu BrowserUk dpuu 1513/s -- -29% BrowserUk 2123/s 40% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +83.33/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -26% BrowserUk 2083/s 36% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.49 usr + 0.00 sys = 0.49 CPU) @ 20 +36.66/s (n=1000) dpuu: 0 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -23% BrowserUk 2037/s 31% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +79.00/s (n=1000) dpuu: 1 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -26% BrowserUk 2079/s 35% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +83.33/s (n=1000) dpuu: 1 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +62.50/s (n=1000) Rate dpuu BrowserUk dpuu 1562/s -- -25% BrowserUk 2083/s 33% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 0 wallclock secs ( 0.50 usr + 0.00 sys = 0.50 CPU) @ 19 +96.01/s (n=1000) dpuu: 0 wallclock secs ( 0.65 usr + 0.00 sys = 0.65 CPU) @ 15 +36.10/s (n=1000) Rate dpuu BrowserUk dpuu 1536/s -- -23% BrowserUk 1996/s 30% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20 +79.00/s (n=1000) dpuu: 1 wallclock secs ( 0.64 usr + 0.00 sys = 0.64 CPU) @ 15 +60.06/s (n=1000) Rate dpuu BrowserUk dpuu 1560/s -- -25% BrowserUk 2079/s 33% -- Benchmark: timing 1000 iterations of BrowserUk, dpuu... BrowserUk: 1 wallclock secs ( 0.47 usr + 0.00 sys = 0.47 CPU) @ 21 +23.14/s (n=1000) dpuu: 0 wallclock secs ( 0.62 usr + 0.00 sys = 0.62 CPU) @ 16 +12.90/s (n=1000) Rate dpuu BrowserUk dpuu 1613/s -- -24% BrowserUk 2123/s 32% -- C:\test>

Well It's better than the Abottoire, but Yorkshire!

In reply to Re: Re: Re: round-robin on varying sequence by BrowserUk
in thread round-robin on varying sequence by dpuu

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.