in reply to Gap-filling lists
Assuming the input lists are already ordered I think this works.
#! perl -slw use strict; use List::Util qw[ min max ]; use Data::Dumper; sub fillList { my( $m, $n, @lists ) = @_; my $lastE = $m-1; map { my( $s, $e ) = @{ $_ }[ 0, $#$_ ]; ( ( $lastE < $s ? [ $lastE + 1 .. $s -1 ] : () ), [ max( $s, $lastE+1 ) .. min( $lastE = $e, $n ) ], ); } @lists, [ $lastE, $n ]; } my @in = ( [ 1 .. 17 ], [ 25 .. 42 ], [ 44 .. 50 ], ); my @out = fillList 12, 62, @in; print Dumper \@out; __END__ C:\test>539350 $VAR1 = [ [ 12, 13, 14, 15, 16, 17 ], [ 18, 19, 20, 21, 22, 23, 24 ], [ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 +, 40, 41, 42 ], [ 43 ], [ 44, 45, 46, 47, 48, 49, 50 ], [ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 ] ];
|
|---|