aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark <53903062+andemark@users.noreply.github.com>2023-03-22 21:12:08 +0000
committerMark <53903062+andemark@users.noreply.github.com>2023-03-22 21:12:08 +0000
commita6318584dd29d4ceb0ed68cee9f99628a0c8dece (patch)
tree1a8023fa424c811adea615013790d871049b256f
parent3f1b014fba8655d40a3a750d1bd6266fc91a0b74 (diff)
downloadperlweeklychallenge-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.raku3
-rw-r--r--challenge-209/mark-anderson/raku/ch-2.raku82
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;
- }
+ }
}