aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark <53903062+andemark@users.noreply.github.com>2023-12-11 05:32:00 +0000
committerMark <53903062+andemark@users.noreply.github.com>2023-12-11 05:32:00 +0000
commit86b40a444f6ad097e863471eb41738fdc304e255 (patch)
tree3c395702c21faa37c16d331b70263a43ecfcdfe8
parent98df168725aa587bd4db1e24018dae1ca77b29da (diff)
downloadperlweeklychallenge-club-86b40a444f6ad097e863471eb41738fdc304e255.tar.gz
perlweeklychallenge-club-86b40a444f6ad097e863471eb41738fdc304e255.tar.bz2
perlweeklychallenge-club-86b40a444f6ad097e863471eb41738fdc304e255.zip
Challenge 247 Solutions (Raku)
-rw-r--r--challenge-247/mark-anderson/raku/ch-1.raku36
-rw-r--r--challenge-247/mark-anderson/raku/ch-2.raku10
2 files changed, 46 insertions, 0 deletions
diff --git a/challenge-247/mark-anderson/raku/ch-1.raku b/challenge-247/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..92ae775140
--- /dev/null
+++ b/challenge-247/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,36 @@
+#!/usr/bin/env raku
+use Test;
+
+is-deeply secret-santa(["Mr. Wall", "Mrs. Wall", "Mr. Anwar",
+ "Mrs. Anwar", "Mr. Conway", "Mr. Cross"]),
+ {
+ "Mrs. Anwar" => "Mr. Conway",
+ "Mr. Conway" => "Mr. Cross",
+ "Mr. Cross" => "Mrs. Wall",
+ "Mrs. Wall" => "Mr. Anwar",
+ "Mr. Anwar" => "Mr. Wall",
+ "Mr. Wall" => "Mrs. Anwar"
+ }
+
+is-deeply secret-santa(["Mr. Wall", "Mrs. Wall", "Mr. Anwar"]),
+ {
+ "Mr. Anwar" => "Mrs. Wall",
+ "Mr. Wall" => "Mr. Anwar",
+ "Mrs. Wall" => "Mr. Wall"
+ }
+
+sub secret-santa(@names)
+{
+ my %surname = @names.classify({ .words[1] });
+
+ my @r = gather given %surname.values.sort.Array
+ {
+ while .elems
+ {
+ take .head.pop;
+ .head ?? $_ .= rotate !! .splice(0,1)
+ }
+ }
+
+ @r.push(@r.head).rotor(2 => -1).map({ .pairup.head }).Hash
+}
diff --git a/challenge-247/mark-anderson/raku/ch-2.raku b/challenge-247/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..532186b18e
--- /dev/null
+++ b/challenge-247/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,10 @@
+#!/usr/bin/env raku
+use Test;
+
+is most-freq-pair("abcdbca"), "bc";
+is most-freq-pair("cdeabeabfcdfabgcd"), "ab";
+
+sub most-freq-pair($str)
+{
+ ($str ~~ m:ov/../)>>.Str.Bag.maxpairs.sort.head.key
+}