in reply to Consolidate ranges (quick and dirty with a cool regexp)
#!/usr/bin/perl use warnings; use strict; use experimental qw( signatures ); use utf8; use Number::Util::Range qw{ convert_number_sequence_to_range }; sub consolidate($s) { my ($name, $range) = $s =~ /(.*):((?:[0-9]+,)+[0-9]+)/g; my @range = split /,/, $range; my $new_range = convert_number_sequence_to_range( array => \@range, min_range_len => 2, separator => '-'); return "$name:" . join ',', @$new_range }
use Test::More tests => 4;
is consolidate('Attacca Quartet:1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28'),
'Attacca Quartet:1-8,10-20,22-28';
is consolidate('John Patitucci:1,2,3,5,8,11,12,13,14,15,16,17,19,25,26,27,28'),
'John Patitucci:1-3,5,8,11-17,19,25-28';
is consolidate('Roomful of Teeth:1,3,5,7,9,12,14,16,19,21,24,26,28'),
'Roomful of Teeth:1,3,5,7,9,12,14,16,19,21,24,26,28';
is consolidate('Sō Percussion:1,3,4,5,6,7,8,11,12,13,14,15,16,18,19,21,22,23,24,25,26,27,28'),
'Sō Percussion:1,3-8,11-16,18-19,21-28';
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Consolidate ranges (quick and dirty with a cool regexp)
by gpvos (Acolyte) on Oct 29, 2024 at 22:30 UTC | |
by hippo (Archbishop) on Oct 30, 2024 at 11:29 UTC | |
|
Re^2: Consolidate ranges (quick and dirty with a cool regexp)
by sleet (Pilgrim) on Oct 30, 2024 at 10:30 UTC |