diff options
| -rw-r--r-- | challenge-172/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-172/arne-sommer/raku/ch-1.raku | 16 | ||||
| -rwxr-xr-x | challenge-172/arne-sommer/raku/ch-2.raku | 41 | ||||
| -rwxr-xr-x | challenge-172/arne-sommer/raku/five-number-summary | 41 | ||||
| -rwxr-xr-x | challenge-172/arne-sommer/raku/prime-partition | 16 |
5 files changed, 115 insertions, 0 deletions
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; + } +} |
