diff options
| author | Mark <53903062+andemark@users.noreply.github.com> | 2023-03-22 21:12:08 +0000 |
|---|---|---|
| committer | Mark <53903062+andemark@users.noreply.github.com> | 2023-03-22 21:12:08 +0000 |
| commit | a6318584dd29d4ceb0ed68cee9f99628a0c8dece (patch) | |
| tree | 1a8023fa424c811adea615013790d871049b256f | |
| parent | 3f1b014fba8655d40a3a750d1bd6266fc91a0b74 (diff) | |
| download | perlweeklychallenge-club-a6318584dd29d4ceb0ed68cee9f99628a0c8dece.tar.gz perlweeklychallenge-club-a6318584dd29d4ceb0ed68cee9f99628a0c8dece.tar.bz2 perlweeklychallenge-club-a6318584dd29d4ceb0ed68cee9f99628a0c8dece.zip | |
Challenge 209 Solutions (Raku)
| -rw-r--r-- | challenge-209/mark-anderson/raku/ch-1.raku | 3 | ||||
| -rw-r--r-- | challenge-209/mark-anderson/raku/ch-2.raku | 82 |
2 files changed, 50 insertions, 35 deletions
diff --git a/challenge-209/mark-anderson/raku/ch-1.raku b/challenge-209/mark-anderson/raku/ch-1.raku index dac544bd91..1584ebecc2 100644 --- a/challenge-209/mark-anderson/raku/ch-1.raku +++ b/challenge-209/mark-anderson/raku/ch-1.raku @@ -16,6 +16,5 @@ nok special-bit-chars(0,0,0,0,1,0); sub special-bit-chars(+$a) { - my $r = / 0+ | [10]+ | [11]+ /; - $a.join ~~ /^ $r* 0 $/ + $a.join ~~ /^ [ 0 | 10 | 11 ]* 0 $/ } diff --git a/challenge-209/mark-anderson/raku/ch-2.raku b/challenge-209/mark-anderson/raku/ch-2.raku index 5248fc8c76..dbe3f6efda 100644 --- a/challenge-209/mark-anderson/raku/ch-2.raku +++ b/challenge-209/mark-anderson/raku/ch-2.raku @@ -1,49 +1,65 @@ #!/usr/bin/env raku +use Test; -merge-accounts([ - ["A", "a1@a.com", "a2@a.com"], - ["B", "b1@b.com"], - ["A", "a3@a.com", "a1@a.com"] - ]); +is-deeply merge-accounts([ + [<A a1@a.com a2@a.com>], + [<B b1@b.com>], + [<A a3@a.com a1@a.com>] + ]), + [ + [<A a1@a.com a2@a.com a3@a.com>], + [<B b1@b.com>] + ]; -merge-accounts([ - ["A", "a1@a.com", "a2@a.com"], - ["B", "b1@b.com"], - ["A", "a3@a.com"], - ["B", "b2@b.com", "b1@b.com"] - ]); +is-deeply merge-accounts([ + [<A a1@a.com a2@a.com>], + [<B b1@b.com>], + [<A a3@a.com>], + [<B b2@b.com b1@b.com>] + ]), + [ + [<A a1@a.com a2@a.com>], + [<A a3@a.com>], + [<B b1@b.com b2@b.com>] + ];; -merge-accounts([ - ["C", "c2@c.com"], - ["C", "c1@c.com", "c4@c.com"], - ["A", "a1@a.com", "a2@a.com"], - ["B", "b1@b.com"], - ["A", "a3@a.com"], - ["C", "c1@c.com", "c3@c.com"], - ["B", "b2@b.com", "b1@b.com"], - ["A", "a3@a.com", "a4@a.com"], - ["B", "b3@b.com"]; - ]); +is-deeply merge-accounts([ + [<C c2@c.com>], + [<C c1@c.com c4@c.com>], + [<A a1@a.com a2@a.com>], + [<B b1@b.com>], + [<A a3@a.com>], + [<B b4@b.com b5@b.com b6@b.com>], + [<C c1@c.com c3@c.com>], + [<B b2@b.com b1@b.com>], + [<A a3@a.com a4@a.com>], + [<B b3@b.com>]; + ]), + [ + [<A a1@a.com a2@a.com>], + [<A a3@a.com a4@a.com>], + [<B b4@b.com b5@b.com b6@b.com>], + [<B b1@b.com b2@b.com>], + [<B b3@b.com>], + [<C c2@c.com>], + [<C c1@c.com c3@c.com c4@c.com>] + ]; sub merge-accounts(@accounts) { my @a = @accounts.classify({ .[0] }, :as{ .[1..*] }); - for @a.sort(*.key) + .Array given gather for @a.sort(*.key) { my $key = .key; my @value = .value>>.Array; - my @g = gather + while @value { - while @value - { - my @v := @value.shift; - my $k = @value.first({ $_ (&) @v }, :k); - $k.defined ?? @value[$k].append(@v) .= unique !! take @v; - } + my @v := @value.shift; + my $k = @value.first({ $_ (&) @v }, :k); + $k.defined ?? (@value[$k] = [(@value[$k] (|) @v).keys]) + !! take [($key, @v.sort.Slip)]; } - - say $key => @g>>.sort; - } + } } |
