aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@frontrangerunner.com>2020-11-16 08:04:25 -0700
committerMark Anderson <mark@frontrangerunner.com>2020-11-16 08:04:25 -0700
commit558fce8644accd4abe206482c872ee0ecb444187 (patch)
treeb8d55cf538dd203be8e05a0bc14e9e53c3d6f680
parentcff21bb0b22502e3b0ef8a4f3946e5f921647115 (diff)
downloadperlweeklychallenge-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.p643
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];
+}