diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-07-04 21:25:17 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-04 21:25:17 +0100 |
| commit | fa227edb69e601c1cbf96e547ac41fcc97d6e577 (patch) | |
| tree | 0d1075d31922d4239b953feef6283a879e868b8f | |
| parent | 6207d0c796712d05e9c3ed7c341d3e445a7eb0e0 (diff) | |
| parent | f43db97cc77d1d728a9c0383aacd8c2b7d2b420e (diff) | |
| download | perlweeklychallenge-club-fa227edb69e601c1cbf96e547ac41fcc97d6e577.tar.gz perlweeklychallenge-club-fa227edb69e601c1cbf96e547ac41fcc97d6e577.tar.bz2 perlweeklychallenge-club-fa227edb69e601c1cbf96e547ac41fcc97d6e577.zip | |
Merge pull request #6391 from andemark/branch-for-challenge-172
Branch for challenge 172
| -rw-r--r-- | challenge-172/mark-anderson/raku/ch-1.raku | 16 | ||||
| -rw-r--r-- | challenge-172/mark-anderson/raku/ch-2.raku | 40 |
2 files changed, 56 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..6c34064f8b --- /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..828ac0192d --- /dev/null +++ b/challenge-172/mark-anderson/raku/ch-2.raku @@ -0,0 +1,40 @@ +#!/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), :max(6)}; +is five-number-summary(1, 2, 3, 4, 5, 6, 7), + {:lower-q(2), :median(4), :min(1), :upper-q(6), :max(7)} +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), :max(49)} +is five-number-summary(7, 15, 36, 39, 40, 41), + {:lower-q(15), :median(37.5), :min(7), :upper-q(40), :max(41)} + +sub five-number-summary(+@a) +{ + @a .= sort; + my $q := quartile(); + + return { + min => @a.head, + lower-q => $q.head, + median => median(@a), + upper-q => $q.tail, + max => @a.tail + } + + 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 + { + # 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); + median(@t.head), median(@t.tail) + } +} |
