aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
+}