diff options
| author | Jan Krňávek <Jan.Krnavek@gmail.com> | 2023-04-09 20:33:05 +0200 |
|---|---|---|
| committer | Jan Krňávek <Jan.Krnavek@gmail.com> | 2023-04-09 20:33:05 +0200 |
| commit | e1ceee2f1f521bd94407dcfc33a663b045f91155 (patch) | |
| tree | b91ac271967e508f4989bed4ca91f06c235f2ea1 /challenge-211 | |
| parent | c716d1042d9d0c5405e8667b302de3d69b7540c5 (diff) | |
| download | perlweeklychallenge-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.raku | 41 |
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 +} |
