diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-03-26 11:04:26 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-26 11:04:26 +0100 |
| commit | 552407c79cd5210f6e26dff3ef63c7094c6f22e7 (patch) | |
| tree | f01c60bdefa4dd0f084d1761b024b299148dda9a | |
| parent | 3e2d7c112df7acf116ac3e9cad95c84dae9025a6 (diff) | |
| parent | 1e03babb4aed4ab8f5535a89b776a9bdf69eae2d (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-209/arne-sommer/raku/ch-1.raku | 28 | ||||
| -rwxr-xr-x | challenge-209/arne-sommer/raku/ch-2.raku | 59 | ||||
| -rwxr-xr-x | challenge-209/arne-sommer/raku/merge-account | 59 | ||||
| -rwxr-xr-x | challenge-209/arne-sommer/raku/special-bit-characters | 28 |
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'); |
