#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

while (<DATA>) {
    chomp;

    my @numbers = split ',';
    print "(@numbers)\n";

    my $last_diff;
    my $start = $numbers[0];
    my @all_series;
    for my $i (1 .. $#numbers + 1) {
        my $diff;
        if ($i < $#numbers + 1) {
            $diff = $numbers[$i] - $numbers[ $i - 1 ];
        }

        # Merge with the last number from the previous series if needed:
        if (!$last_diff # Just starting a new series.
            and $i > 2  # Far enough to have preceding numbers.
            and $diff and $diff == $numbers[ $i - 1 ] - $numbers[ $i - 2 ]
           ) {
            $all_series[-1]{end} = $numbers[ $i - 3 ];
            $all_series[-1]{offset} = 0 if $all_series[-1]{start} == $all_series[-1]{end};
            $start = $numbers[ $i - 2 ];
        }

        if (! $diff or ( $last_diff && ($last_diff != $diff)) ) {
            push @all_series, { start  => $start,
                                end    => $numbers[ $i - 1 ],
                                offset => $last_diff,
                              };
            $start = $numbers[$i];
            undef $diff;
        }
        $last_diff = $diff;
    }

    print Dumper \@all_series;
    print "\n";
}

__END__
1,2,3,10,12,14
1,2,3,5,7
1,7,8,9
1,2,3,7,8,11,13,15,22,100,150,200
2,3,5,8,13,21,34,55,89
1,2,3,9,10,12,14,15,20,25
