aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Sommer <arne@bbop.org>2025-10-11 21:14:12 +0200
committerArne Sommer <arne@bbop.org>2025-10-11 21:14:12 +0200
commit87126c3c60cb2e06abc584cd110befe8641b0ca9 (patch)
treec23eda19c307a0d72c1cc580b67e13261a710deb
parentc67782155e32747232adfd17631f8739f2f57d11 (diff)
downloadperlweeklychallenge-club-87126c3c60cb2e06abc584cd110befe8641b0ca9.tar.gz
perlweeklychallenge-club-87126c3c60cb2e06abc584cd110befe8641b0ca9.tar.bz2
perlweeklychallenge-club-87126c3c60cb2e06abc584cd110befe8641b0ca9.zip
week 342 Arne Sommer
-rw-r--r--challenge-342/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-342/arne-sommer/raku/balance-string29
-rwxr-xr-xchallenge-342/arne-sommer/raku/ch-1.raku29
-rwxr-xr-xchallenge-342/arne-sommer/raku/ch-2.raku21
-rwxr-xr-xchallenge-342/arne-sommer/raku/max-score21
5 files changed, 101 insertions, 0 deletions
diff --git a/challenge-342/arne-sommer/blog.txt b/challenge-342/arne-sommer/blog.txt
new file mode 100644
index 0000000000..9bd4ab84d9
--- /dev/null
+++ b/challenge-342/arne-sommer/blog.txt
@@ -0,0 +1 @@
+http://raku.local/maximum-balance.html \ No newline at end of file
diff --git a/challenge-342/arne-sommer/raku/balance-string b/challenge-342/arne-sommer/raku/balance-string
new file mode 100755
index 0000000000..2e60a1eb78
--- /dev/null
+++ b/challenge-342/arne-sommer/raku/balance-string
@@ -0,0 +1,29 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str ~~ /^ <[0..9 a..z]>+ $/,
+ :v(:$verbose));
+
+my @letters = $str.comb.grep( * eq any("a" .. "z") ).sort;
+my @digits = $str.comb.grep( * eq any("0" .. "9") ).sort;
+
+my $letters = @letters.elems;
+my $digits = @digits.elems;
+
+if $verbose
+{
+ say ": $letters letters: { @letters.join(", ") } (sorted)";
+ say ": $digits digits: { @digits.join(", ") } (sorted)";
+}
+
+if $digits == $letters || $digits == $letters +1
+{
+ say roundrobin(@digits, @letters).flat.join;
+}
+elsif $digits == $letters -1
+{
+ say roundrobin(@letters, @digits).flat.join;
+}
+else
+{
+ say "";
+}
diff --git a/challenge-342/arne-sommer/raku/ch-1.raku b/challenge-342/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..2e60a1eb78
--- /dev/null
+++ b/challenge-342/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,29 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str ~~ /^ <[0..9 a..z]>+ $/,
+ :v(:$verbose));
+
+my @letters = $str.comb.grep( * eq any("a" .. "z") ).sort;
+my @digits = $str.comb.grep( * eq any("0" .. "9") ).sort;
+
+my $letters = @letters.elems;
+my $digits = @digits.elems;
+
+if $verbose
+{
+ say ": $letters letters: { @letters.join(", ") } (sorted)";
+ say ": $digits digits: { @digits.join(", ") } (sorted)";
+}
+
+if $digits == $letters || $digits == $letters +1
+{
+ say roundrobin(@digits, @letters).flat.join;
+}
+elsif $digits == $letters -1
+{
+ say roundrobin(@letters, @digits).flat.join;
+}
+else
+{
+ say "";
+}
diff --git a/challenge-342/arne-sommer/raku/ch-2.raku b/challenge-342/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..1e0b6a0237
--- /dev/null
+++ b/challenge-342/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,21 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str ~~ /^ <[01]> ** 2..* $/,
+ :v(:$verbose));
+
+my $max = -Inf;
+
+for 1 .. $str.chars -1 -> $i
+{
+ my $left = $str.substr(0, $i);
+ my $right = $str.substr($i);
+ my $left-score = $left.comb.grep( * eq 0 ).elems;
+ my $right-score = $right.comb.sum;
+ my $score = $left-score + $right-score;
+
+ say ": Index:$i: $left - $right | $left-score + $right-score = $score { $score > $max ?? "max" !! ""}" if $verbose;
+
+ $max = $score if $score > $max;
+}
+
+say $max;
diff --git a/challenge-342/arne-sommer/raku/max-score b/challenge-342/arne-sommer/raku/max-score
new file mode 100755
index 0000000000..1e0b6a0237
--- /dev/null
+++ b/challenge-342/arne-sommer/raku/max-score
@@ -0,0 +1,21 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str ~~ /^ <[01]> ** 2..* $/,
+ :v(:$verbose));
+
+my $max = -Inf;
+
+for 1 .. $str.chars -1 -> $i
+{
+ my $left = $str.substr(0, $i);
+ my $right = $str.substr($i);
+ my $left-score = $left.comb.grep( * eq 0 ).elems;
+ my $right-score = $right.comb.sum;
+ my $score = $left-score + $right-score;
+
+ say ": Index:$i: $left - $right | $left-score + $right-score = $score { $score > $max ?? "max" !! ""}" if $verbose;
+
+ $max = $score if $score > $max;
+}
+
+say $max;