aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2021-06-05 19:36:07 +0200
committerJan Krňávek <Jan.Krnavek@gmail.com>2021-06-05 19:36:07 +0200
commitce2a306f1127ca23cba0c5553b32f11118dda096 (patch)
tree7fcf546cb178386adc0eaf8976e97212bc18ec22
parent373a97f7ee737cbd8d3e8d87a96b6ae0dec388b5 (diff)
downloadperlweeklychallenge-club-ce2a306f1127ca23cba0c5553b32f11118dda096.tar.gz
perlweeklychallenge-club-ce2a306f1127ca23cba0c5553b32f11118dda096.tar.bz2
perlweeklychallenge-club-ce2a306f1127ca23cba0c5553b32f11118dda096.zip
solutions week 115
-rw-r--r--challenge-115/wambash/raku/ch-1.raku30
-rw-r--r--challenge-115/wambash/raku/ch-2.raku25
2 files changed, 55 insertions, 0 deletions
diff --git a/challenge-115/wambash/raku/ch-1.raku b/challenge-115/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..0a0e1e3687
--- /dev/null
+++ b/challenge-115/wambash/raku/ch-1.raku
@@ -0,0 +1,30 @@
+#!/usr/bin/env raku
+
+
+sub string-chain-iter (@a,@s) {
+ @a
+ andthen .map: { |$_ X, (@s.Bag ∖ $_).keys.grep: -> $x { $x.starts-with: .tail.comb.tail} }\
+ andthen .map: *.Slip
+}
+
+sub string-chain (+@s) {
+ my &iter = &string-chain-iter.assuming(*,@s);
+ [@s.head], *.&iter ... *
+ andthen .[@s.end]
+ andthen .first: { .cache; .head.starts-with: .tail.comb.tail }
+}
+
+
+multi MAIN (*@s) {
+ say +so string-chain @s
+}
+
+multi MAIN (:test($)!) {
+ use Test;
+ is-deeply string-chain-iter(('abc',), ('dea','cd','cec')).any, ('abc','cd') & ('abc','cec');
+ is-deeply string-chain-iter(('abd','dea',), ('dea','abd')), (('abd','dea'), ('dea','abd'));
+ is string-chain('abc', 'dea','cd','cec'),('abc','cec','cd','dea');
+ is string-chain('abc', 'dea','cd',), ('abc','cd','dea');
+ is string-chain('ade', 'fgh','cbd',), Nil;
+ done-testing;
+}
diff --git a/challenge-115/wambash/raku/ch-2.raku b/challenge-115/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..a2100bfcae
--- /dev/null
+++ b/challenge-115/wambash/raku/ch-2.raku
@@ -0,0 +1,25 @@
+#!/usr/bin/env raku
+
+
+sub largest-multiple (+@n) {
+ with @n.grep(* %% 2).min -> $min-even {
+ @n.Bag ∖ $min-even
+ andthen .kxxv.sort.reverse
+ andthen .join ~ $min-even
+ }
+}
+
+
+multi MAIN (:test($)!) {
+ use Test;
+ is largest-multiple(1,0,2,6), 6210;
+ is largest-multiple(1,4,2,8), 8412;
+ is largest-multiple(1,4,7,6), 7614;
+ is largest-multiple(1,4,7,4), 7414;
+ is largest-multiple(1,3,7,9), '9731Inf';
+ done-testing;
+}
+
+multi MAIN (*@n) {
+ say largest-multiple @n;
+}