diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-05-01 11:30:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-01 11:30:20 +0100 |
| commit | de15fe19c732b9425edc58c80f172c7d1d5bfd8c (patch) | |
| tree | 45e6cefd15bc371ea3921e5d64b255f720fd2cfe | |
| parent | 2f5ee8d01e0212d9c8e587014b0df2710e0b0ef1 (diff) | |
| parent | 17403fe9f2423fea312e57b752ee465ee2ff6931 (diff) | |
| download | perlweeklychallenge-club-de15fe19c732b9425edc58c80f172c7d1d5bfd8c.tar.gz perlweeklychallenge-club-de15fe19c732b9425edc58c80f172c7d1d5bfd8c.tar.bz2 perlweeklychallenge-club-de15fe19c732b9425edc58c80f172c7d1d5bfd8c.zip | |
Merge pull request #109 from Scimon/master
Challenge 1
| -rwxr-xr-x | challenge-006/simon-proctor/perl6/ch-1.p6 | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/challenge-006/simon-proctor/perl6/ch-1.p6 b/challenge-006/simon-proctor/perl6/ch-1.p6 new file mode 100755 index 0000000000..00dca1a540 --- /dev/null +++ b/challenge-006/simon-proctor/perl6/ch-1.p6 @@ -0,0 +1,54 @@ +#!/usr/bin/env perl6 + +use v6; + +class GrowableRange { + has Int $.min; + has Int $.max; + + submethod BUILD( Int :$!min, Int :$!max ) {} + + method next() { $!max + 1 } + + method grow() { $!max++; return self } + + method gist() { $!min == $!max ?? $!min.Str !! "{$!min}-{$!max}" } + + method Str() { self.gist } +} + +sub USAGE { say $*USAGE } + +#| Display Help file +multi sub MAIN ( Bool :h($help) where *.so ) { USAGE(); } + +#| Get the shortend list of a CSV string +multi sub MAIN ( + Str $number-string where * ~~ /^ \d+ [ ',' \d+ ]* $/ #= Comma seperated list of numbers +) { + my Int @in = [$_.Int for $number-string.split(",")].sort( * <=> * ); + say process-list( @in ); +} + +#| Get the shorted list of a space seperated list of number +multi sub MAIN ( + *@numbers where { all($_) ~~ IntStr } #= List of integers +) { + my Int @in = [$_.Int for @numbers].sort( * <=> * ); + say process-list( @in ); +} + +sub process-list( Int @numbers ) { + my $current; + my @out; + + for @numbers -> $number { + if @out.elems == 0 || @out[*-1].next != $number { + @out.push( GrowableRange.new( min => $number, max => $number ) ); + } else { + @out[*-1].grow; + } + } + + return @out.join(","); +} |
