diff options
| author | Jan Krňávek <Jan.Krnavek@gmail.com> | 2023-04-09 20:46:13 +0200 |
|---|---|---|
| committer | Jan Krňávek <Jan.Krnavek@gmail.com> | 2023-04-09 20:46:13 +0200 |
| commit | 5cd8262ea32c8c204f6bce0c6ee9fd26279f39cc (patch) | |
| tree | 0a065d2d7d3b768e887eabfb93bf31b2b090df50 | |
| parent | e1ceee2f1f521bd94407dcfc33a663b045f91155 (diff) | |
| download | perlweeklychallenge-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.raku | 36 |
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; } |
