aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2023-03-26 23:27:06 +0100
committerGitHub <noreply@github.com>2023-03-26 23:27:06 +0100
commit973a8fa0bee6c5a79634f63887bbe9c919e86d4c (patch)
treed46af3d851ec4be4a2c2dfa1db69dfaf2db8f545
parente0885b7e23239030e2b4f59270cae1796d7f2f4c (diff)
parent996f2da081108dc83066daa918378d972a912c9d (diff)
downloadperlweeklychallenge-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.raku29
-rw-r--r--challenge-209/wambash/raku/ch-2.raku42
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
+}