From 320c6addf371830f87c194e7cb8c8300f1f75865 Mon Sep 17 00:00:00 2001 From: Jan Krňávek Date: Sun, 19 Oct 2025 11:09:06 +0200 Subject: solutions week 342 --- challenge-342/wambash/raku/ch-1.raku | 25 +++++++++++++++++++++++++ challenge-342/wambash/raku/ch-2.raku | 22 ++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 challenge-342/wambash/raku/ch-1.raku create mode 100644 challenge-342/wambash/raku/ch-2.raku 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: / [$=\d|$=<:L>]+ /; + + do with ( $ - $ ) { + when 0|1 { roundrobin $.sort, $.sort, :slip } + when -1 { roundrobin $.sort, $.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; +} -- cgit