diff options
| author | Mark <53903062+andemark@users.noreply.github.com> | 2022-07-04 09:57:07 +0000 |
|---|---|---|
| committer | Mark <53903062+andemark@users.noreply.github.com> | 2022-07-04 09:57:07 +0000 |
| commit | 0f0c121ddf962e82d030ea69c85be3fef971d5bb (patch) | |
| tree | 559043e924b3df4fd58277731c9762836cd7ce45 | |
| parent | 42bd07d080a38d552fb4562de9eba28ccfbecb18 (diff) | |
| download | perlweeklychallenge-club-0f0c121ddf962e82d030ea69c85be3fef971d5bb.tar.gz perlweeklychallenge-club-0f0c121ddf962e82d030ea69c85be3fef971d5bb.tar.bz2 perlweeklychallenge-club-0f0c121ddf962e82d030ea69c85be3fef971d5bb.zip | |
Challenge 172 Solutions (Raku)
| -rw-r--r-- | challenge-172/mark-anderson/raku/ch-1.raku | 16 | ||||
| -rw-r--r-- | challenge-172/mark-anderson/raku/ch-2.raku | 38 |
2 files changed, 54 insertions, 0 deletions
diff --git a/challenge-172/mark-anderson/raku/ch-1.raku b/challenge-172/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..196e5d6a1b --- /dev/null +++ b/challenge-172/mark-anderson/raku/ch-1.raku @@ -0,0 +1,16 @@ +#!/usr/bin/env raku +use Test; + +is-deeply prime-partition(18, 2), ((5, 13), (7, 11)); +is-deeply prime-partition(19, 3), ((3, 5, 11),); +is-deeply prime-partition(45, 5), ((3, 5, 7, 11, 19), (3, 5, 7, 13, 17)); +is-deeply prime-partition(95, 8), ((2, 3, 5, 7, 11, 13, 17, 37), + (2, 3, 5, 7, 11, 13, 23, 31), + (2, 3, 5, 7, 11, 17, 19, 31), + (2, 3, 5, 7, 13, 17, 19, 29), + (2, 3, 7, 11, 13, 17, 19, 23)); + +sub prime-partition($m, $n) +{ + (2,3,5,7...$m-2).grep(&is-prime).combinations($n).grep({ .sum == $m }) +} diff --git a/challenge-172/mark-anderson/raku/ch-2.raku b/challenge-172/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..8c02fd09cb --- /dev/null +++ b/challenge-172/mark-anderson/raku/ch-2.raku @@ -0,0 +1,38 @@ +#!/usr/bin/env raku +use Test; + +is five-number-summary(1, 2, 3, 4, 5, 6), + {:lower-q(2), :median(3.5), :min(1), :upper-q(5)}; +is five-number-summary(1, 2, 3, 4, 5, 6, 7), + {:lower-q(2), :median(4), :min(1), :upper-q(6)} +is five-number-summary(6, 7, 15, 36, 39, 40, 41, 42, 43, 47, 49), + {:lower-q(15), :median(40), :min(6), :upper-q(43)} +is five-number-summary(7, 15, 36, 39, 40, 41), + {:lower-q(15), :median(37.5), :min(7), :upper-q(40)} + +sub five-number-summary(+@a) +{ + @a .= sort; + + return { + min => @a.head, + median => median(@a), + lower-q => quartile('lower'), + upper-q => quartile('upper') + } + + sub median(@a) + { + my $r = @a.elems div 2; + @a.elems mod 2 ?? @a[$r] !! (.head.tail + .tail.head) / 2 + given @a.rotor($r).cache + } + + sub quartile($s) + { + # method 1 from https://en.wikipedia.org/wiki/Quartile + my $r = @a.elems div 2; + my @t = @a.elems mod 2 ?? @a.rotor($r, 1, $r) !! @a.rotor($r); + $s eq 'lower' ?? median(@t.head) !! median(@t.tail); + } +} |
