use warnings;
use strict;
use Set::IntSpan;
my %color;
while (<DATA>) {
push @{$color{$1}}, $. if /\sbgcolor="([^"]+)"/;
}
for (sort keys %color) {
my $span = Set::IntSpan->new(@{$color{$_}});
print "$_: ", $span->run_list, "\n";
}
__DATA__
<td bgcolor="white"></td>
<td bgcolor="white"></td>
<td bgcolor="white"></td>
<td bgcolor="white"></td>
<td bgcolor="white"></td>
<td bgcolor="green" height="10"></td>
<td bgcolor="green" height="10"></td>
<td bgcolor="green" height="10"></td>
<td bgcolor="green" height="10"></td>
<td bgcolor="green" height="10"></td>
<td bgcolor="white"></td>
<td bgcolor="white"></td>
<td bgcolor="white"></td>
<td bgcolor="white"></td>
<td bgcolor="green" height="10"></td>
<td bgcolor="green" height="10"></td>
<td bgcolor="white"></td>
<td bgcolor="white"></td>
<td bgcolor="white"></td>
green: 6-10,15-16
white: 1-5,11-14,17-19