aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarrOff <58253563+BarrOff@users.noreply.github.com>2025-10-12 21:54:18 +0200
committerBarrOff <58253563+BarrOff@users.noreply.github.com>2025-10-12 21:54:18 +0200
commit82fd7ee6cdc9b16e0d0022079d78cd429cde8d02 (patch)
tree96f58c7d65fce411c32c5fcb48bb10e6f2ed635f
parentf6729419da3f2b22a3ca1768e3ff6b5279929cc7 (diff)
downloadperlweeklychallenge-club-82fd7ee6cdc9b16e0d0022079d78cd429cde8d02.tar.gz
perlweeklychallenge-club-82fd7ee6cdc9b16e0d0022079d78cd429cde8d02.tar.bz2
perlweeklychallenge-club-82fd7ee6cdc9b16e0d0022079d78cd429cde8d02.zip
feat: add solution for challenge 342 from BarrOff
-rw-r--r--challenge-342/barroff/raku/ch-1.p650
1 files changed, 50 insertions, 0 deletions
diff --git a/challenge-342/barroff/raku/ch-1.p6 b/challenge-342/barroff/raku/ch-1.p6
new file mode 100644
index 0000000000..7bcd3c730f
--- /dev/null
+++ b/challenge-342/barroff/raku/ch-1.p6
@@ -0,0 +1,50 @@
+#!/usr/bin/env raku
+
+use v6.d;
+
+sub intermingle-arrays(@arr1, @arr2 --> Str) {
+ return map(
+ { @arr1[$_] ~ @arr2[$_] },
+ 0..^@arr1.elems
+ ).join;
+}
+
+sub balance-string(Str $str --> Str) {
+ my @letters = grep({ /^ <:Ll> $/ }, $str.comb).sort;
+ my @numbers = grep({ /^ \d $/ }, $str.comb).sort;
+ my Int $occurence-diff = @letters.elems - @numbers.elems;
+ given $occurence-diff {
+ when 0 {
+ intermingle-arrays(@numbers, @letters);
+ }
+ when 1 {
+ my Str $pairs = intermingle-arrays(@letters[0..*-2], @numbers);
+ return $pairs ~ @letters[*-1];
+ }
+ when -1 {
+ my Str $pairs = intermingle-arrays(@numbers[0..*-2], @letters);
+ return $pairs ~ @numbers[*-1];
+ }
+ default {
+ return "";
+ }
+ }
+}
+
+#| Run test cases
+multi sub MAIN('test') {
+ use Test;
+ plan 5;
+
+ is balance-string("a0b1c2"), "0a1b2c", 'works for "a0b1c2"';
+ is balance-string("abc12"), "a1b2c", 'works for "abc12"';
+ is balance-string("0a2b1c3"), "0a1b2c3", 'works for "0a2b1c3"';
+ is balance-string("1a23"), "", 'works for "1a23"';
+ is balance-string("ab123"), "1a2b3", 'works for "ab123"';
+}
+
+#| Take user provided string like a0b1c2
+multi sub MAIN(Str $str) {
+ say balance-string($str);
+}
+