aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2023-04-09 20:46:13 +0200
committerJan Krňávek <Jan.Krnavek@gmail.com>2023-04-09 20:46:13 +0200
commit5cd8262ea32c8c204f6bce0c6ee9fd26279f39cc (patch)
tree0a065d2d7d3b768e887eabfb93bf31b2b090df50
parente1ceee2f1f521bd94407dcfc33a663b045f91155 (diff)
downloadperlweeklychallenge-club-5cd8262ea32c8c204f6bce0c6ee9fd26279f39cc.tar.gz
perlweeklychallenge-club-5cd8262ea32c8c204f6bce0c6ee9fd26279f39cc.tar.bz2
perlweeklychallenge-club-5cd8262ea32c8c204f6bce0c6ee9fd26279f39cc.zip
solution week 211-2 -- `combinations` works well
-rw-r--r--challenge-211/wambash/raku/ch-2.raku36
1 files changed, 16 insertions, 20 deletions
diff --git a/challenge-211/wambash/raku/ch-2.raku b/challenge-211/wambash/raku/ch-2.raku
index 57f2b1be23..ab6f2a060c 100644
--- a/challenge-211/wambash/raku/ch-2.raku
+++ b/challenge-211/wambash/raku/ch-2.raku
@@ -2,37 +2,33 @@
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 .combinations( 1..$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, 2, 3, 4, 5, 6, 7, 8), (1,8);
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>;
+ subtest {
+ plan 2;
+ my @twenty = <
+ 44531 73257 49118 89580
+ 25846 88015 19523 99285
+ 75574 80036 10796 89896
+ 77776 69138 75824 80610
+ 47566 1623 20068 5294
+ >;
+ with split-same-average(@twenty) {
+ is .&average, average(@twenty);
+ is .elems, @twenty.elems div 2;
+ }
+ }
done-testing;
}