diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-03-26 23:27:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-26 23:27:06 +0100 |
| commit | 973a8fa0bee6c5a79634f63887bbe9c919e86d4c (patch) | |
| tree | d46af3d851ec4be4a2c2dfa1db69dfaf2db8f545 | |
| parent | e0885b7e23239030e2b4f59270cae1796d7f2f4c (diff) | |
| parent | 996f2da081108dc83066daa918378d972a912c9d (diff) | |
| download | perlweeklychallenge-club-973a8fa0bee6c5a79634f63887bbe9c919e86d4c.tar.gz perlweeklychallenge-club-973a8fa0bee6c5a79634f63887bbe9c919e86d4c.tar.bz2 perlweeklychallenge-club-973a8fa0bee6c5a79634f63887bbe9c919e86d4c.zip | |
Merge pull request #7803 from wambash/challenge-week-209
Challenge week 209
| -rw-r--r-- | challenge-209/wambash/raku/ch-1.raku | 29 | ||||
| -rw-r--r-- | challenge-209/wambash/raku/ch-2.raku | 42 |
2 files changed, 71 insertions, 0 deletions
diff --git a/challenge-209/wambash/raku/ch-1.raku b/challenge-209/wambash/raku/ch-1.raku new file mode 100644 index 0000000000..490f38abe3 --- /dev/null +++ b/challenge-209/wambash/raku/ch-1.raku @@ -0,0 +1,29 @@ +#!/usr/bin/env raku + +my token A {0}; +my token B {10}; +my token C {11}; + +multi special-bit-charakters (+@bits) { + samewith @bits.join +} + +multi special-bit-charakters ($str) { + $str.contains: /^ [ <A> | <B> | <C> ]* <A> $/ +} + +multi MAIN (Bool :test($)!) { + use Test; + is special-bit-charakters(1,0,0), True; + is special-bit-charakters(1,1,1,0), False; + is special-bit-charakters(1110), False; + done-testing; +} + +multi MAIN (Str $sbits) { + say +special-bit-charakters $sbits +} + +multi MAIN (*@bits) { + say +special-bit-charakters @bits +} diff --git a/challenge-209/wambash/raku/ch-2.raku b/challenge-209/wambash/raku/ch-2.raku new file mode 100644 index 0000000000..fe07c54e11 --- /dev/null +++ b/challenge-209/wambash/raku/ch-2.raku @@ -0,0 +1,42 @@ +#!/usr/bin/env raku + +sub join-account (+@acc) { + @acc.head.head, |@acc.map( |*.skip ).sort.squish; +} + +sub merge-account-reducer ( @account, $email) { + @account + andthen .classify: { $email ∈ .skip }\ + andthen |(.{False} // Empty), join-account |.{True} +} + +sub merge-account (+@accounts) { + my @email = @accounts.map( |*.skip ).unique; + + @accounts, |@email + andthen .reduce: &merge-account-reducer +} + +multi MAIN (Bool :test($)!) { + use Test; + my @accounts := <A a1@a.com a2@a.com>, <B b1@b.com>, <A a3@a.com a1@a.com>; + is-deeply join-account( @accounts ), <A a1@a.com a2@a.com a3@a.com b1@b.com>; + is-deeply join-account( + <A a1@a.com a2@a.com>, <A a3@a.com a2@a.com a1@a.com> + ), <A a1@a.com a2@a.com a3@a.com>; + is-deeply merge-account-reducer( @accounts, 'a1@a.com' ), (<B b1@b.com>,<A a1@a.com a2@a.com a3@a.com>); + is-deeply merge-account-reducer( @accounts, 'a2@a.com' ), (<B b1@b.com>, <A a3@a.com a1@a.com>, <A a1@a.com a2@a.com>); + is-deeply merge-account-reducer( @accounts, 'a3@a.com' ), (<A a1@a.com a2@a.com>,<B b1@b.com>, <A a1@a.com a3@a.com>); + is-deeply merge-account( @accounts ), ( <B b1@b.com>, <A a1@a.com a2@a.com a3@a.com> ); + is-deeply merge-account( <A a1@a.com a2@a.com>, <B b1@b.com b2@b.com>, <A a3@a.com > ), + (<A a1@a.com a2@a.com>, <B b1@b.com b2@b.com>, <A a3@a.com>); + is merge-account( <A a1@a.com a2@a.com>, <B b1@b.com b2@b.com>, <A a3@a.com >, <A a4@a.com a1@a.com> ), + ( <B b1@b.com b2@b.com>, <A a3@a.com>, <A a1@a.com a2@a.com a4@a.com>, ); + is-deeply merge-account( <A a b c>, <A a> ), ( <A a b c>,); + is-deeply merge-account( <A a b c>, <A c d e>, <B x y>, <A d f> ), ( <B x y>, <A a b c d e f>,); + done-testing; +} + +multi MAIN (:@account) { + say merge-account @account.map: *.words.list +} |
