diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-10-19 14:49:28 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-19 14:49:28 +0100 |
| commit | cc715f2347bfa6eed5f58b28cc7c8b99fa6c81cf (patch) | |
| tree | 5f95c60ad0669315104d1a24529e9a048b8a7155 | |
| parent | 2e33837a5d237655e79329d8fa24e051a51d3c30 (diff) | |
| parent | 320c6addf371830f87c194e7cb8c8300f1f75865 (diff) | |
| download | perlweeklychallenge-club-cc715f2347bfa6eed5f58b28cc7c8b99fa6c81cf.tar.gz perlweeklychallenge-club-cc715f2347bfa6eed5f58b28cc7c8b99fa6c81cf.tar.bz2 perlweeklychallenge-club-cc715f2347bfa6eed5f58b28cc7c8b99fa6c81cf.zip | |
Merge pull request #12863 from wambash/challenge-week-342
solutions week 342
| -rw-r--r-- | challenge-342/wambash/raku/ch-1.raku | 25 | ||||
| -rw-r--r-- | challenge-342/wambash/raku/ch-2.raku | 22 |
2 files changed, 47 insertions, 0 deletions
diff --git a/challenge-342/wambash/raku/ch-1.raku b/challenge-342/wambash/raku/ch-1.raku new file mode 100644 index 0000000000..4816ceea86 --- /dev/null +++ b/challenge-342/wambash/raku/ch-1.raku @@ -0,0 +1,25 @@ +#!/usr/bin/env raku + +sub balance-string (+$str) { + $str + andthen .match: / [$<digit>=\d|$<letter>=<:L>]+ /; + + do with ( $<digit> - $<letter> ) { + when 0|1 { roundrobin $<digit>.sort, $<letter>.sort, :slip } + when -1 { roundrobin $<letter>.sort, $<digit>.sort, :slip } + default { '' } + } andthen [~] $_ +} +multi MAIN (Bool :test($)!) { + use Test; + is balance-string('a0b1c2'), '0a1b2c', 'letters and digits interleaved: a0b1c2 → 0a1b2c'; + is balance-string('abc12'), 'a1b2c', 'letters first then digits: abc12 → a1b2c'; + is balance-string('0a2b1c3'), '0a1b2c3', 'digits and letters shuffled: 0a2b1c3 → 0a1b2c3'; + is balance-string('1a23'), '', 'unbalanced input 1a23 cannot form alternating string'; + is balance-string('ab123'), '1a2b3', 'more digits than letters: ab123 → 1a2b3'; + done-testing; +} + +multi MAIN (+$str) { + say balance-string $str; +} diff --git a/challenge-342/wambash/raku/ch-2.raku b/challenge-342/wambash/raku/ch-2.raku new file mode 100644 index 0000000000..d1d7396718 --- /dev/null +++ b/challenge-342/wambash/raku/ch-2.raku @@ -0,0 +1,22 @@ +#!/usr/bin/env raku + +sub max-score (+$str) { + $str + andthen .match: /^ [(0)|1]+ [(1)|0]+ $/, :ex + andthen .map: { .[0] + .[1] }\ + andthen .max +} + +multi MAIN (Bool :test($)!) { + use Test; + is max-score('0011'), 4, 'split 0011 as 00|11 gives 2 zeros + 2 ones = 4'; + is max-score('0000'), 3, 'all zeros: best split 000|0 gives 3 zeros + 0 ones = 3'; + is max-score('1111'), 3, 'all ones: best split 1|111 gives 0 zeros + 3 ones = 3'; + is max-score('0101'), 3, 'alternating bits: split 0|101 gives 1 zero + 2 ones = 3'; + is max-score('011101'), 5, 'mixed pattern: split 0|11101 gives 1 zero + 4 ones = 5'; + done-testing; +} + +multi MAIN (+$str) { + say max-score $str; +} |
