aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-07-04 21:25:17 +0100
committerGitHub <noreply@github.com>2022-07-04 21:25:17 +0100
commitfa227edb69e601c1cbf96e547ac41fcc97d6e577 (patch)
tree0d1075d31922d4239b953feef6283a879e868b8f
parent6207d0c796712d05e9c3ed7c341d3e445a7eb0e0 (diff)
parentf43db97cc77d1d728a9c0383aacd8c2b7d2b420e (diff)
downloadperlweeklychallenge-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.raku16
-rw-r--r--challenge-172/mark-anderson/raku/ch-2.raku40
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)
+ }
+}