diff options
| -rw-r--r-- | challenge-247/mark-anderson/raku/ch-1.raku | 36 | ||||
| -rw-r--r-- | challenge-247/mark-anderson/raku/ch-2.raku | 10 |
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 +} |
