Perl para o resgate!
#!/usr/bin/perl
use warnings;
use strict;
my $group_size = 3;
my @first = split ' ', <>;
my @groups;
my $start_index = 0;
while ($start_index < @first) {
my $step = 1;
while ( $step < $group_size
&& $start_index + $step < @first
&& $first[$start_index] == $first[ $start_index + $step ]
) {
++$step;
}
push @groups, $step;
print $first[$start_index], ' ';
$start_index += $step;
}
print "\n";
my @numbers = split ' ', <>;
my $last;
for my $size (@groups) {
my @group = splice @numbers, 0, $size;
my $value = $group[-1] - $group[0];
$value = $group[0] - $last if 1 == $size;
$last = $group[-1];
print $value, ' ';
}
print "\n";
Você não especificou o que deve acontecer se o primeiro grupo tiver apenas um membro.