diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-10-18 23:37:18 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-18 23:37:18 +0100 |
| commit | 6d2273cbd1735771c0abd5305a1b334a2c94a96c (patch) | |
| tree | 77055b335988d22a9fa3be8f05d03fdade7b471e | |
| parent | aeb6c4fdf8b4c19b409729c4fa7c5a16b5e9d3e6 (diff) | |
| parent | e1c62d3712ec7ead51e51df16c508b9192d8ca5e (diff) | |
| download | perlweeklychallenge-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.raku | 19 | ||||
| -rw-r--r-- | challenge-082/wambash/raku/ch-2.raku | 44 |
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; +} |
