diff options
| author | Mark Anderson <mark@frontrangerunner.com> | 2020-11-16 08:04:25 -0700 |
|---|---|---|
| committer | Mark Anderson <mark@frontrangerunner.com> | 2020-11-16 08:04:25 -0700 |
| commit | 558fce8644accd4abe206482c872ee0ecb444187 (patch) | |
| tree | b8d55cf538dd203be8e05a0bc14e9e53c3d6f680 | |
| parent | cff21bb0b22502e3b0ef8a4f3946e5f921647115 (diff) | |
| download | perlweeklychallenge-club-558fce8644accd4abe206482c872ee0ecb444187.tar.gz perlweeklychallenge-club-558fce8644accd4abe206482c872ee0ecb444187.tar.bz2 perlweeklychallenge-club-558fce8644accd4abe206482c872ee0ecb444187.zip | |
ch-1.p6
| -rw-r--r-- | challenge-087/mark-anderson/raku/ch-1.p6 | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/challenge-087/mark-anderson/raku/ch-1.p6 b/challenge-087/mark-anderson/raku/ch-1.p6 new file mode 100644 index 0000000000..e2e9753b02 --- /dev/null +++ b/challenge-087/mark-anderson/raku/ch-1.p6 @@ -0,0 +1,43 @@ +multi MAIN(*@n where .all ~~ Int) { + my @seqs = get-longest-seqs(@n); + + @seqs = @seqs.map(*.join(", ").List); + + .say for @seqs or 0; +} + +multi MAIN { + use Test; + plan 3; + + cmp-ok get-longest-seqs([100, 4, 50, 3, 2]), + &[eqv], [(2, 3, 4),], "Example 1"; + + cmp-ok get-longest-seqs([20, 30, 10, 40, 50]), + &[eqv], [], "Example 2"; + + cmp-ok get-longest-seqs([20, 19, 9, 11, 10]), + &[eqv], [(9, 10, 11),], "Example 3"; +} + +sub get-longest-seqs(@n) { + my %h; + @n = @n.sort.unique; + + while @n { + my $seq = @n.splice(0, get-index(@n)); + %h{$seq} = $seq.elems if $seq > 1; + } + + sub get-index(@n) { + for ^@n -> $i { + unless @n[0..$i] == @n[0]..@n[$i] { + return $i; + } + } + + return @n.elems; + } + + [gather take .key.split(/\s/).map(+*).List for %h.maxpairs.sort]; +} |
