From 0f0c121ddf962e82d030ea69c85be3fef971d5bb Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:57:07 +0000 Subject: Challenge 172 Solutions (Raku) --- challenge-172/mark-anderson/raku/ch-1.raku | 16 +++++++++++++ challenge-172/mark-anderson/raku/ch-2.raku | 38 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 challenge-172/mark-anderson/raku/ch-1.raku create mode 100644 challenge-172/mark-anderson/raku/ch-2.raku 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); + } +} -- cgit From 6b2899544f28eb035ecabd875df1f7f0d5fe289e Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Mon, 4 Jul 2022 10:05:08 +0000 Subject: Challenge 172 Solutions (Raku) --- challenge-172/mark-anderson/raku/ch-2.raku | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/challenge-172/mark-anderson/raku/ch-2.raku b/challenge-172/mark-anderson/raku/ch-2.raku index 8c02fd09cb..8eaf4c99a4 100644 --- a/challenge-172/mark-anderson/raku/ch-2.raku +++ b/challenge-172/mark-anderson/raku/ch-2.raku @@ -2,13 +2,13 @@ use Test; is five-number-summary(1, 2, 3, 4, 5, 6), - {:lower-q(2), :median(3.5), :min(1), :upper-q(5)}; + {: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)} + {: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)} + {: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)} + {:lower-q(15), :median(37.5), :min(7), :upper-q(40), :max(41)} sub five-number-summary(+@a) { @@ -16,9 +16,10 @@ sub five-number-summary(+@a) return { min => @a.head, - median => median(@a), lower-q => quartile('lower'), - upper-q => quartile('upper') + median => median(@a), + upper-q => quartile('upper'), + max => @a.tail } sub median(@a) -- cgit From fa8fe709a515f2f1a8b733fb9890a357602a6f28 Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Mon, 4 Jul 2022 10:10:09 +0000 Subject: Challenge 172 Solutions (Raku) --- challenge-172/mark-anderson/raku/ch-2.raku | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-172/mark-anderson/raku/ch-2.raku b/challenge-172/mark-anderson/raku/ch-2.raku index 8eaf4c99a4..7623904369 100644 --- a/challenge-172/mark-anderson/raku/ch-2.raku +++ b/challenge-172/mark-anderson/raku/ch-2.raku @@ -34,6 +34,6 @@ sub five-number-summary(+@a) # 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); + $s eq 'lower' ?? median(@t.head) !! median(@t.tail) } } -- cgit From f43db97cc77d1d728a9c0383aacd8c2b7d2b420e Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Mon, 4 Jul 2022 17:38:03 +0000 Subject: Challenge 172 Solutions (Raku) --- challenge-172/mark-anderson/raku/ch-1.raku | 2 +- challenge-172/mark-anderson/raku/ch-2.raku | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/challenge-172/mark-anderson/raku/ch-1.raku b/challenge-172/mark-anderson/raku/ch-1.raku index 196e5d6a1b..6c34064f8b 100644 --- a/challenge-172/mark-anderson/raku/ch-1.raku +++ b/challenge-172/mark-anderson/raku/ch-1.raku @@ -12,5 +12,5 @@ is-deeply prime-partition(95, 8), ((2, 3, 5, 7, 11, 13, 17, 37), sub prime-partition($m, $n) { - (2,3,5,7...$m-2).grep(&is-prime).combinations($n).grep({ .sum == $m }) + (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 index 7623904369..828ac0192d 100644 --- a/challenge-172/mark-anderson/raku/ch-2.raku +++ b/challenge-172/mark-anderson/raku/ch-2.raku @@ -12,13 +12,14 @@ is five-number-summary(7, 15, 36, 39, 40, 41), sub five-number-summary(+@a) { - @a .= sort; + @a .= sort; + my $q := quartile(); - return { - min => @a.head, - lower-q => quartile('lower'), + return { + min => @a.head, + lower-q => $q.head, median => median(@a), - upper-q => quartile('upper'), + upper-q => $q.tail, max => @a.tail } @@ -26,14 +27,14 @@ sub five-number-summary(+@a) { my $r = @a.elems div 2; @a.elems mod 2 ?? @a[$r] !! (.head.tail + .tail.head) / 2 - given @a.rotor($r).cache + given @a.rotor($r).cache } - sub quartile($s) + 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); - $s eq 'lower' ?? median(@t.head) !! median(@t.tail) + median(@t.head), median(@t.tail) } } -- cgit