From a031f2668d2f73c5079d6d74e33d8cc9e16cae54 Mon Sep 17 00:00:00 2001 From: arnesom Date: Sun, 10 Jul 2022 17:09:24 +0200 Subject: Arne Sommer --- challenge-172/arne-sommer/blog.txt | 1 + challenge-172/arne-sommer/raku/ch-1.raku | 16 +++++++++ challenge-172/arne-sommer/raku/ch-2.raku | 41 ++++++++++++++++++++++ challenge-172/arne-sommer/raku/five-number-summary | 41 ++++++++++++++++++++++ challenge-172/arne-sommer/raku/prime-partition | 16 +++++++++ 5 files changed, 115 insertions(+) create mode 100644 challenge-172/arne-sommer/blog.txt create mode 100755 challenge-172/arne-sommer/raku/ch-1.raku create mode 100755 challenge-172/arne-sommer/raku/ch-2.raku create mode 100755 challenge-172/arne-sommer/raku/five-number-summary create mode 100755 challenge-172/arne-sommer/raku/prime-partition diff --git a/challenge-172/arne-sommer/blog.txt b/challenge-172/arne-sommer/blog.txt new file mode 100644 index 0000000000..51ef2f95ad --- /dev/null +++ b/challenge-172/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/primary-five.html diff --git a/challenge-172/arne-sommer/raku/ch-1.raku b/challenge-172/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..441f97e603 --- /dev/null +++ b/challenge-172/arne-sommer/raku/ch-1.raku @@ -0,0 +1,16 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $m where $m > 0, Int $n where $n > 0, :a($all)); + +my $primes := (2 .. $m).grep( *.is-prime ); + +for $primes.combinations($n) -> @combination +{ + my $sum = @combination.sum; + + if $sum == $m + { + say @combination.join(", "); + last unless $all; + } +} diff --git a/challenge-172/arne-sommer/raku/ch-2.raku b/challenge-172/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..e8fbf487db --- /dev/null +++ b/challenge-172/arne-sommer/raku/ch-2.raku @@ -0,0 +1,41 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@integers where all(@integers) ~~ Int, :v($verbose)); + +my @sorted = @integers>>.Int.sort; + +say ": Sorted: @sorted[]" if $verbose; + +my @fns = +( + @sorted[0], + lower_quartile(@sorted), + median(@sorted), + upper_quartile(@sorted), + @sorted[*-1] +); + +sub median (@values) +{ + my $count = @values.elems; + + return @values[$count/2] if $count % 2; + + return (@values[$count/2 -0.5] + @values[$count/2 +0.5]) / 2; +} + +sub lower_quartile (@values) +{ + my $count = @values.elems; + + return median(@values[0 .. $count/2 -0.5]); +} + +sub upper_quartile (@values) +{ + my $count = @values.elems; + + return median(@values[$count/2 .. *]); +} + +say @fns.join(", "); diff --git a/challenge-172/arne-sommer/raku/five-number-summary b/challenge-172/arne-sommer/raku/five-number-summary new file mode 100755 index 0000000000..e8fbf487db --- /dev/null +++ b/challenge-172/arne-sommer/raku/five-number-summary @@ -0,0 +1,41 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@integers where all(@integers) ~~ Int, :v($verbose)); + +my @sorted = @integers>>.Int.sort; + +say ": Sorted: @sorted[]" if $verbose; + +my @fns = +( + @sorted[0], + lower_quartile(@sorted), + median(@sorted), + upper_quartile(@sorted), + @sorted[*-1] +); + +sub median (@values) +{ + my $count = @values.elems; + + return @values[$count/2] if $count % 2; + + return (@values[$count/2 -0.5] + @values[$count/2 +0.5]) / 2; +} + +sub lower_quartile (@values) +{ + my $count = @values.elems; + + return median(@values[0 .. $count/2 -0.5]); +} + +sub upper_quartile (@values) +{ + my $count = @values.elems; + + return median(@values[$count/2 .. *]); +} + +say @fns.join(", "); diff --git a/challenge-172/arne-sommer/raku/prime-partition b/challenge-172/arne-sommer/raku/prime-partition new file mode 100755 index 0000000000..441f97e603 --- /dev/null +++ b/challenge-172/arne-sommer/raku/prime-partition @@ -0,0 +1,16 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $m where $m > 0, Int $n where $n > 0, :a($all)); + +my $primes := (2 .. $m).grep( *.is-prime ); + +for $primes.combinations($n) -> @combination +{ + my $sum = @combination.sum; + + if $sum == $m + { + say @combination.join(", "); + last unless $all; + } +} -- cgit