aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPolgár Márton <polgar@astron.hu>2022-07-04 10:56:38 +0200
committerPolgár Márton <polgar@astron.hu>2022-07-04 10:56:38 +0200
commit0a9b85926bf1bc18770397f058fdb6e4aebebabd (patch)
treea26ef174e8d1c7e952ae66cc96953126d3b8fa4c
parentb3935323c76281b5390e5a8cd95d812aeb54c9f8 (diff)
downloadperlweeklychallenge-club-0a9b85926bf1bc18770397f058fdb6e4aebebabd.tar.gz
perlweeklychallenge-club-0a9b85926bf1bc18770397f058fdb6e4aebebabd.tar.bz2
perlweeklychallenge-club-0a9b85926bf1bc18770397f058fdb6e4aebebabd.zip
Solution for first task
-rwxr-xr-xchallenge-172/2colours/raku/ch-1.raku32
1 files changed, 32 insertions, 0 deletions
diff --git a/challenge-172/2colours/raku/ch-1.raku b/challenge-172/2colours/raku/ch-1.raku
new file mode 100755
index 0000000000..0ee9b236ff
--- /dev/null
+++ b/challenge-172/2colours/raku/ch-1.raku
@@ -0,0 +1,32 @@
+#!/usr/bin/env raku
+
+constant @primes = (1 .. *).grep: &is-prime;
+
+multi prime-partition($sum, $count) {
+ gather samewith $sum, $count, 1, ()
+}
+
+#bound check (could be more accurate for sure)
+sub unfinishable($sum, $count, $chosen-prime) { $sum < $count * $chosen-prime }
+
+#terminating when done
+multi prime-partition($sum, 0, $, @rest) {
+ take @rest if $sum == 0;
+}
+
+#
+multi prime-partition($sum, $count, $lower-bound, @rest) {
+ my &finishable = { !unfinishable($sum, $count, $_) };
+ my @prime-range = lazy @primes.toggle: :off, * > $lower-bound;
+ @prime-range .= toggle: &finishable;
+ samewith $sum - $_, $count - 1, $_, (|@rest, $_) for @prime-range;
+}
+
+sub MAIN(
+ Int $m,
+ Int $n
+) {
+ say "Input: \$m = $m, \$n = $n";
+ my $output = prime-partition($m, $n).map(*.join: ', ').join: ' or ';
+ say "Output: $output";
+} \ No newline at end of file