in reply to
Calculate overlap between 2 ranges of numbers
The hard way. :-)
Seriously, there may be easier solutions, (Set::IntSpan).
This way involves the vec function.
#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw/ min max /;
my @range = ([5,15], [2, 20]);
my $min = min map {$_->[0]} @range;
my $max = max map {$_->[1]} @range;
my @vec = ("") x @range;
for my $i (0 .. $#vec) {
vec($vec[$i], $_, 1) = 1 for $range[$i][0] .. $range[$i][1];
}
my $overlap = shift @vec;
$overlap &= $vec[ $_ ] for 0 .. $#vec;
my $count;
for my $offset ($min .. $max) {
++$count if vec($overlap, $offset, 1) == 1;
}
print $count;
And a thank you for this solution from another
post by
BrowserUK.