aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2023-03-26 11:04:26 +0100
committerGitHub <noreply@github.com>2023-03-26 11:04:26 +0100
commit552407c79cd5210f6e26dff3ef63c7094c6f22e7 (patch)
treef01c60bdefa4dd0f084d1761b024b299148dda9a
parent3e2d7c112df7acf116ac3e9cad95c84dae9025a6 (diff)
parent1e03babb4aed4ab8f5535a89b776a9bdf69eae2d (diff)
downloadperlweeklychallenge-club-552407c79cd5210f6e26dff3ef63c7094c6f22e7.tar.gz
perlweeklychallenge-club-552407c79cd5210f6e26dff3ef63c7094c6f22e7.tar.bz2
perlweeklychallenge-club-552407c79cd5210f6e26dff3ef63c7094c6f22e7.zip
Merge pull request #7788 from arnesom/branch-for-challenge-209
Arne Sommer
-rw-r--r--challenge-209/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-209/arne-sommer/raku/ch-1.raku28
-rwxr-xr-xchallenge-209/arne-sommer/raku/ch-2.raku59
-rwxr-xr-xchallenge-209/arne-sommer/raku/merge-account59
-rwxr-xr-xchallenge-209/arne-sommer/raku/special-bit-characters28
5 files changed, 175 insertions, 0 deletions
diff --git a/challenge-209/arne-sommer/blog.txt b/challenge-209/arne-sommer/blog.txt
new file mode 100644
index 0000000000..cd28336b87
--- /dev/null
+++ b/challenge-209/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/special-account.html
diff --git a/challenge-209/arne-sommer/raku/ch-1.raku b/challenge-209/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..1c21288e73
--- /dev/null
+++ b/challenge-209/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@bits where @bits.elems > 0 && all(@bits) eq any(0,1) && @bits[*-1] == 0, :v($verbose));
+
+my $string = "";
+
+while (@bits.elems)
+{
+ my $first = @bits.shift;
+
+ if $first == 0
+ {
+ $string ~= 'a';
+ }
+ elsif (@bits.elems)
+ {
+ my $second = @bits.shift;
+ $string ~= $second == 0 ?? 'b' !! 'c';
+ }
+ else
+ {
+ $string ~= "ERROR";
+ }
+}
+
+say ":String: $string" if $verbose;
+
+say + $string.ends-with('a');
diff --git a/challenge-209/arne-sommer/raku/ch-2.raku b/challenge-209/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..c37a8428f0
--- /dev/null
+++ b/challenge-209/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,59 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:v($verbose));
+
+my @accounts1 = [ ["A", "a1@a.com", "a2@a.com"],
+ ["B", "b1@b.com"],
+ ["A", "a3@a.com", "a1@a.com"]
+ ];
+
+say "Example 1:";
+merge-accounts(@accounts1);
+
+my @accounts2 = [ ["A", "a1@a.com", "a2@a.com"],
+ ["B", "b1@b.com"],
+ ["A", "a3@a.com"],
+ ["B", "b2@b.com", "b1@b.com"]
+ ];
+
+say "\nExample2:";
+merge-accounts(@accounts2);
+
+sub merge-accounts (@accounts)
+{
+ my %accounts;
+
+ACC:
+ for @accounts -> @account
+ {
+ my $key = @account.shift;
+ my @email = @account;
+
+ if %accounts{$key}
+ {
+ for @(%accounts{$key}) -> @emails
+ {
+ if any(@emails) eq any(@email)
+ {
+ say ":Append $key emails: @email[] (to @emails[])" if $verbose;
+ @emails.append: @email;
+ next ACC;
+ }
+ }
+ }
+
+ say ":Add $key emails: @email[]" if $verbose;
+
+ %accounts{$key}.push: @email;
+ }
+
+ say "[";
+ for sort keys %accounts -> $key
+ {
+ for @(%accounts{$key}) -> @emails
+ {
+ say " [\"$key\", ", join(", ", @emails.unique.map({ "\"$_\""}) ), "],";
+ }
+ }
+ say "]";
+}
diff --git a/challenge-209/arne-sommer/raku/merge-account b/challenge-209/arne-sommer/raku/merge-account
new file mode 100755
index 0000000000..c37a8428f0
--- /dev/null
+++ b/challenge-209/arne-sommer/raku/merge-account
@@ -0,0 +1,59 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:v($verbose));
+
+my @accounts1 = [ ["A", "a1@a.com", "a2@a.com"],
+ ["B", "b1@b.com"],
+ ["A", "a3@a.com", "a1@a.com"]
+ ];
+
+say "Example 1:";
+merge-accounts(@accounts1);
+
+my @accounts2 = [ ["A", "a1@a.com", "a2@a.com"],
+ ["B", "b1@b.com"],
+ ["A", "a3@a.com"],
+ ["B", "b2@b.com", "b1@b.com"]
+ ];
+
+say "\nExample2:";
+merge-accounts(@accounts2);
+
+sub merge-accounts (@accounts)
+{
+ my %accounts;
+
+ACC:
+ for @accounts -> @account
+ {
+ my $key = @account.shift;
+ my @email = @account;
+
+ if %accounts{$key}
+ {
+ for @(%accounts{$key}) -> @emails
+ {
+ if any(@emails) eq any(@email)
+ {
+ say ":Append $key emails: @email[] (to @emails[])" if $verbose;
+ @emails.append: @email;
+ next ACC;
+ }
+ }
+ }
+
+ say ":Add $key emails: @email[]" if $verbose;
+
+ %accounts{$key}.push: @email;
+ }
+
+ say "[";
+ for sort keys %accounts -> $key
+ {
+ for @(%accounts{$key}) -> @emails
+ {
+ say " [\"$key\", ", join(", ", @emails.unique.map({ "\"$_\""}) ), "],";
+ }
+ }
+ say "]";
+}
diff --git a/challenge-209/arne-sommer/raku/special-bit-characters b/challenge-209/arne-sommer/raku/special-bit-characters
new file mode 100755
index 0000000000..1c21288e73
--- /dev/null
+++ b/challenge-209/arne-sommer/raku/special-bit-characters
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@bits where @bits.elems > 0 && all(@bits) eq any(0,1) && @bits[*-1] == 0, :v($verbose));
+
+my $string = "";
+
+while (@bits.elems)
+{
+ my $first = @bits.shift;
+
+ if $first == 0
+ {
+ $string ~= 'a';
+ }
+ elsif (@bits.elems)
+ {
+ my $second = @bits.shift;
+ $string ~= $second == 0 ?? 'b' !! 'c';
+ }
+ else
+ {
+ $string ~= "ERROR";
+ }
+}
+
+say ":String: $string" if $verbose;
+
+say + $string.ends-with('a');