aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-10-18 23:37:18 +0100
committerGitHub <noreply@github.com>2020-10-18 23:37:18 +0100
commit6d2273cbd1735771c0abd5305a1b334a2c94a96c (patch)
tree77055b335988d22a9fa3be8f05d03fdade7b471e
parentaeb6c4fdf8b4c19b409729c4fa7c5a16b5e9d3e6 (diff)
parente1c62d3712ec7ead51e51df16c508b9192d8ca5e (diff)
downloadperlweeklychallenge-club-6d2273cbd1735771c0abd5305a1b334a2c94a96c.tar.gz
perlweeklychallenge-club-6d2273cbd1735771c0abd5305a1b334a2c94a96c.tar.bz2
perlweeklychallenge-club-6d2273cbd1735771c0abd5305a1b334a2c94a96c.zip
Merge pull request #2550 from wambash/challenge-week-082
Challenge week 082
-rw-r--r--challenge-082/wambash/raku/ch-1.raku19
-rw-r--r--challenge-082/wambash/raku/ch-2.raku44
2 files changed, 63 insertions, 0 deletions
diff --git a/challenge-082/wambash/raku/ch-1.raku b/challenge-082/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..6a90697ef8
--- /dev/null
+++ b/challenge-082/wambash/raku/ch-1.raku
@@ -0,0 +1,19 @@
+#!/usr/bin/env raku
+
+sub common-factors( +@a ) {
+ my $gcd = [gcd] @a;
+ 1, 2 ... $gcd
+ andthen .grep: $gcd %% *
+}
+
+multi MAIN ( +@a ) {
+ say common-factors @a;
+}
+
+multi MAIN (Bool :$test!) {
+ use Test;
+ is common-factors(12, 18), (1,2,3,6);
+ is common-factors(18, 23), (1);
+ is common-factors(6, 9, 15), (1,3);
+ done-testing
+}
diff --git a/challenge-082/wambash/raku/ch-2.raku b/challenge-082/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..b15a83588a
--- /dev/null
+++ b/challenge-082/wambash/raku/ch-2.raku
@@ -0,0 +1,44 @@
+#!/usr/bin/env raku
+
+multi step ( ( :@what where :!elems, :@from where :!elems ) ) {
+ True
+}
+
+multi step ( (:@what, :@from ) ) {
+ @from.first: { .head eqv @what.head}, :k
+ andthen \(
+ what => @what.skip,
+ from => (
+ |@from[0 ..^ $_],
+ @from[$_].skip.cache || Empty,
+ |@from[$_ ^.. *]
+ ).pick(*),
+ )
+ orelse False
+}
+
+multi interleave ( :@what, :@from ) {
+ \( :@what, :@from )
+ andthen $_, *.&step ... Bool
+}
+
+multi interleave ( Str :$what, :@from ) {
+ samewith(
+ what => $what.comb,
+ from => @from.map: *.comb.cache,
+ ).tail
+}
+
+
+multi MAIN ( $what, +@from ) {
+ say interleave(:$what, :@from)
+}
+
+multi MAIN (Bool :$test!) {
+ use Test;
+ is-deeply interleave( :what(1,2,2,3), :from((1,2),(2,3)) ).[*-3], \( :what((3).Seq),:from(((3,),).Seq) );
+ ok interleave( :what<XXY>, :from<XY X> );
+ ok interleave( :what<XXXXZY>, :from<XXY XXZ> );
+ nok interleave( :what<XXY>, :from<YX X> );
+ done-testing;
+}