aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-10-19 14:49:28 +0100
committerGitHub <noreply@github.com>2025-10-19 14:49:28 +0100
commitcc715f2347bfa6eed5f58b28cc7c8b99fa6c81cf (patch)
tree5f95c60ad0669315104d1a24529e9a048b8a7155
parent2e33837a5d237655e79329d8fa24e051a51d3c30 (diff)
parent320c6addf371830f87c194e7cb8c8300f1f75865 (diff)
downloadperlweeklychallenge-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.raku25
-rw-r--r--challenge-342/wambash/raku/ch-2.raku22
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;
+}