1 2 3 4 5
2 3 4 5 6
1 2 3 4 <<< Range = 4 NOT!
####
sub overlap{
($_[1] < $_[3] ? $_[1]: $_[3])
-
($_[0] > $_[2] ? $_[0] : $_[2]) + 1;
}
@data = qw[1 5 2 6];
print "\n@data : ", overlap @data
and @data = map($_-1, @data)
while grep $_>0,@data;
1 5 2 6 : 4
0 4 1 5 : 4
-1 3 0 4 : 4
-2 2 -1 3 : 4
-3 1 -2 2 : 4
-4 0 -3 1 : 4
my @data = qw[1 2 5 6];
print "\n@data : ", overlap @data
and @data = map($_-1, @data)
while grep $_>0,@data;
1 2 5 6 : -2
0 1 4 5 : -2
-1 0 3 4 : -2
-2 -1 2 3 : -2
-3 -2 1 2 : -2
-4 -3 0 1 : -2
my @data = qw[2 5 1 6];
print "\n@data : ", overlap @data
and @data = map($_-1, @data)
while grep $_>0,@data;
2 5 1 6 : 4
1 4 0 5 : 4
0 3 -1 4 : 4
-1 2 -2 3 : 4
-2 1 -3 2 : 4
-3 0 -4 1 : 4
my @data = qw[1 6 2 5];
print "\n@data : ", overlap @data
and @data = map($_-1, @data)
while grep $_>0,@data;
1 6 2 5 : 4
0 5 1 4 : 4
-1 4 0 3 : 4
-2 3 -1 2 : 4
-3 2 -2 1 : 4
-4 1 -3 0 : 4
####
#! perl -slw
use strict;
sub overlap{
@_ = map{abs $_ } @_ if 4 == grep $_ < 0, @_;
local $_ = ($_[1] < $_[3] ? $_[1]: $_[3]) - ($_[0] > $_[2] ? $_[0] : $_[2]) ;
$_ > -1 ? $_ : 0;
}
while() {
chomp;
print,next unless length;
print $_, ' = ', overlap( ( split(' ') )[0 .. 3] );
}
print'';
my @data = qw[1 5 2 6];
print "@data : ", overlap @data
and @data = map($_-1, @data)
while grep $_>0,@data;
__DATA__
1 2 2 3 (0)
2 3 1 2 (0)
1 2 3 4 (0)
1 3 2 4 (1)
1 4 2 3 (1)
2 4 1 3 (1)
3 4 1 2 (0)
-2 -1 1 2 (0)
-2 1 -1 2 (2)
-2 2 -1 1 (2)
-1 2 -2 1 (2)
1 2 -2 -1 (0)
-2 -3 -1 -2 (0)
-1 -2 -3 -4 (0)
-1 -3 -2 -4 (1)
-1 -4 -2 -3 (1)
-2 -4 -1 -3 (1)
-3 -4 -1 -2 (0)
####
C:\test>232325
1 2 2 3 (0) = 0
2 3 1 2 (0) = 0
1 2 3 4 (0) = 0
1 3 2 4 (1) = 1
1 4 2 3 (1) = 1
2 4 1 3 (1) = 1
3 4 1 2 (0) = 0
-2 -1 1 2 (0) = 0
-2 1 -1 2 (2) = 2
-2 2 -1 1 (2) = 2
-1 2 -2 1 (2) = 2
1 2 -2 -1 (0) = 0
-2 -3 -1 -2 (0) = 0
-1 -2 -3 -4 (0) = 0
-1 -3 -2 -4 (1) = 1
-1 -4 -2 -3 (1) = 1
-2 -4 -1 -3 (1) = 1
-3 -4 -1 -2 (0) = 0
1 5 2 6 : 3
0 4 1 5 : 3
-1 3 0 4 : 3
-2 2 -1 3 : 3
-3 1 -2 2 : 3
-4 0 -3 1 : 3
C:\test>