#!/usr/bin/env perl use strict; use warnings; use constant UNDEF => "\0"; use Test::More; my @tests = ( [qw{2 2 2 3 3 4 4}], [qw{2 2 3 3 4 4 2 2 2}], [qw{2 2 2 3 3 4 4 2 2}], [qw{2 2 2 3 3 4 4 4 5 6 6}], [qw{2 2 6 6 6 3 3 4 4 4 5}], [qw{2 2 3 3 4 4}, ('') x 3], [('') x 3, qw{2 2 3 3 4 4}], [('') x 2, qw{2 2 3 3 4 4}, ('') x 3], [qw{2 2 3 3 4 4}, (undef) x 3], [(undef) x 3, qw{2 2 3 3 4 4}], [(undef) x 2, qw{2 2 3 3 4 4}, (undef) x 3], [(undef) x 2, ('') x 2, qw{2 2 3 3 4 4}, ('') x 2, (undef) x 3], ); plan tests => 0+@tests; ok(get_max_count($_) == 3) for @tests; sub get_max_count { my ($data) = @_; my ($inst, $key, %consec, $last); for (@$data) { $_ = UNDEF unless defined; $last = "$_:$_" unless 0+keys(%consec); if ($_ ne $last) { $key = join '-', $_, ++$inst; $last = $_; } ++$consec{$key}; } return (sort { $b <=> $a } values %consec)[0]; } #### 1..12 ok 1 ok 2 ok 3 ok 4 ok 5 ok 6 ok 7 ok 8 ok 9 ok 10 ok 11 ok 12