diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-12-12 14:51:24 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-12 14:51:24 +0000 |
| commit | 9556fdb8663e49dfe91304305a04479c10b43870 (patch) | |
| tree | 6685e59cd7d4040f50f98bd28f7f3751f7eaf4b3 | |
| parent | 98df168725aa587bd4db1e24018dae1ca77b29da (diff) | |
| parent | 80ae4abbbd0c764ed3452bcb9261a37d76faf7b5 (diff) | |
| download | perlweeklychallenge-club-9556fdb8663e49dfe91304305a04479c10b43870.tar.gz perlweeklychallenge-club-9556fdb8663e49dfe91304305a04479c10b43870.tar.bz2 perlweeklychallenge-club-9556fdb8663e49dfe91304305a04479c10b43870.zip | |
Merge pull request #9224 from andemark/challenge-247
Challenge 247 Solutions (Raku)
| -rw-r--r-- | challenge-247/mark-anderson/raku/ch-1.raku | 58 | ||||
| -rw-r--r-- | challenge-247/mark-anderson/raku/ch-2.raku | 26 |
2 files changed, 84 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..3e3e059503 --- /dev/null +++ b/challenge-247/mark-anderson/raku/ch-1.raku @@ -0,0 +1,58 @@ +#!/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" + } + +# Example from Peter Campbell Smith +is-deeply secret-santa(["Rudolph Reindeer", "Dasher Reindeer", + "Dancer Reindeer", "Prancer Reindeer", + "Vixen Reindeer", "Comet Reindeer", + "Cupid Reindeer", "Donner Reindeer", + "Blitzen Reindeer", "Santa Claus", + "Mrs. Claus", "Subordinate Claus"]), + { + "Donner Reindeer" => "Mrs. Claus", + "Blitzen Reindeer" => "Subordinate Claus", + "Cupid Reindeer" => "Santa Claus", + "Dancer Reindeer" => "Dasher Reindeer", + "Comet Reindeer" => "Vixen Reindeer", + "Dasher Reindeer" => "Rudolph Reindeer", + "Vixen Reindeer" => "Prancer Reindeer", + "Rudolph Reindeer" => "Blitzen Reindeer", + "Prancer Reindeer" => "Dancer Reindeer", + "Santa Claus" => "Comet Reindeer", + "Subordinate Claus" => "Donner Reindeer", + "Mrs. Claus" => "Cupid Reindeer", + } + +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 !! .shift + } + } + + @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..82ab53feb8 --- /dev/null +++ b/challenge-247/mark-anderson/raku/ch-2.raku @@ -0,0 +1,26 @@ +#!/usr/bin/env raku +use Test; + +is most-freq-pair("abcdbca"), "bc"; +is most-freq-pair("cdeabeabfcdfabgcd"), "ab"; + +say most-freq-pair([~] ("a".."z").roll(100_000)); + +multi most-freq-pair($str where .chars < 100_000) +{ + ($str ~~ m:ov/../)>>.Str.Bag.maxpairs.sort.head.key +} + +multi most-freq-pair($str) +{ + my $len = ($str.chars / $*KERNEL.cpu-cores).ceiling; + + my @promises = (^$*KERNEL.cpu-cores).map( + { + start { ($str.substr(($len * $_), $len+1) ~~ m:ov/../)>>.Str.Bag } + }); + + await @promises; + + ([(+)] @promises>>.result).maxpairs.sort.head.key +} |
