From 1e03babb4aed4ab8f5535a89b776a9bdf69eae2d Mon Sep 17 00:00:00 2001 From: arnesom Date: Fri, 24 Mar 2023 22:06:56 +0100 Subject: Arne Sommer --- challenge-209/arne-sommer/blog.txt | 1 + challenge-209/arne-sommer/raku/ch-1.raku | 28 ++++++++++ challenge-209/arne-sommer/raku/ch-2.raku | 59 ++++++++++++++++++++++ challenge-209/arne-sommer/raku/merge-account | 59 ++++++++++++++++++++++ .../arne-sommer/raku/special-bit-characters | 28 ++++++++++ 5 files changed, 175 insertions(+) create mode 100644 challenge-209/arne-sommer/blog.txt create mode 100755 challenge-209/arne-sommer/raku/ch-1.raku create mode 100755 challenge-209/arne-sommer/raku/ch-2.raku create mode 100755 challenge-209/arne-sommer/raku/merge-account create mode 100755 challenge-209/arne-sommer/raku/special-bit-characters 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'); -- cgit