From 86b40a444f6ad097e863471eb41738fdc304e255 Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Mon, 11 Dec 2023 05:32:00 +0000 Subject: Challenge 247 Solutions (Raku) --- challenge-247/mark-anderson/raku/ch-1.raku | 36 ++++++++++++++++++++++++++++++ challenge-247/mark-anderson/raku/ch-2.raku | 10 +++++++++ 2 files changed, 46 insertions(+) create mode 100644 challenge-247/mark-anderson/raku/ch-1.raku create mode 100644 challenge-247/mark-anderson/raku/ch-2.raku 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 +} -- cgit