From a6318584dd29d4ceb0ed68cee9f99628a0c8dece Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Wed, 22 Mar 2023 21:12:08 +0000 Subject: Challenge 209 Solutions (Raku) --- challenge-209/mark-anderson/raku/ch-1.raku | 3 +- 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([ + [], + [], + [] + ]), + [ + [], + [] + ]; -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([ + [], + [], + [], + [] + ]), + [ + [], + [], + [] + ];; -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([ + [], + [], + [], + [], + [], + [], + [], + [], + [], + []; + ]), + [ + [], + [], + [], + [], + [], + [], + [] + ]; 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; - } + } } -- cgit