http://qs321.pair.com?node_id=388342


in reply to Finding missing numbers in a list

use List::Util qw[ reduce ]; my @in = ( 41888, 41889, 41890, 41892, 41895 ); my @missing; reduce{ push @missing, $a+1 .. $b-1; $b } @in; print @missing; 41891 41893 41894

If your list is large, then this will be more (memory) efficient:

my @in = ( 41888, 41889, 41890, 41892, 41895 ); my @missing; push @missing, $in[ $_ ] +1 .. $in[ $_+1 ] -1 for 0 .. $#in-1; print @missing; 41891 41893 41894

Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon

Replies are listed 'Best First'.
Re^2: Finding missing numbers in a list
by ambrus (Abbot) on Sep 03, 2004 at 17:05 UTC

    Wow! Reduce with side effects, I've never seen that idiom. Smart.

      Well, I'd probably use my mapn utility func for this, but reduce is available pretty much everywhere and lent itself to avoiding the discussion about implementation details.


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "Think for yourself!" - Abigail
      "Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon