aboutsummaryrefslogtreecommitdiff
path: root/challenge-211
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2023-04-09 20:33:05 +0200
committerJan Krňávek <Jan.Krnavek@gmail.com>2023-04-09 20:33:05 +0200
commite1ceee2f1f521bd94407dcfc33a663b045f91155 (patch)
treeb91ac271967e508f4989bed4ca91f06c235f2ea1 /challenge-211
parentc716d1042d9d0c5405e8667b302de3d69b7540c5 (diff)
downloadperlweeklychallenge-club-e1ceee2f1f521bd94407dcfc33a663b045f91155.tar.gz
perlweeklychallenge-club-e1ceee2f1f521bd94407dcfc33a663b045f91155.tar.bz2
perlweeklychallenge-club-e1ceee2f1f521bd94407dcfc33a663b045f91155.zip
solution week 211-2 -- backtracking, (potentiality fast but not)
Diffstat (limited to 'challenge-211')
-rw-r--r--challenge-211/wambash/raku/ch-2.raku41
1 files changed, 41 insertions, 0 deletions
diff --git a/challenge-211/wambash/raku/ch-2.raku b/challenge-211/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..57f2b1be23
--- /dev/null
+++ b/challenge-211/wambash/raku/ch-2.raku
@@ -0,0 +1,41 @@
+#!/usr/bin/env raku
+
+sub average { @^a.sum / @^a.elems }
+
+sub split-same-average-reducer ( @acc, $item, :$average, :$elems-limit ) {
+ @acc
+ andthen .grep: { .elems < $elems-limit }\
+ andthen .map: { |@^list, $item }\
+ andthen .grep: { .&average ≤ $average }\
+ andthen |@acc, |$_
+}
+
+sub split-same-average (+@nums) {
+ my $average = average @nums;
+ my $elems-limit = @nums.elems div 2;
+
+ @nums
+ andthen .sort
+ andthen (list(),), |$_
+ andthen .reduce: {split-same-average-reducer @^acc, $^item, :$average, :$elems-limit }\
+ andthen .first: { .&average == $average },
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is split-same-average(1, 2, 3, 4, 5, 6, 7, 8),(4,5);
+ is split-same-average(1,3), Nil;
+ is split-same-average(<
+ 44531 73257 49118 89580
+ 25846 88015 19523 99285
+ 75574 80036 10796 89896
+ 77776 69138 75824 80610
+ 47566 1623 20068 5294
+ >),
+ <10796 19523 20068 47566 69138 73257 75574 75824 80036 89896>;
+ done-testing;
+}
+
+multi MAIN (*@nums) {
+ say split-same-average @nums
+}