aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Sommer <arne@bbop.org>2025-07-05 23:28:33 +0200
committerArne Sommer <arne@bbop.org>2025-07-05 23:28:33 +0200
commitd6b046407de81e97c1babdf1064d017e71a0e3bb (patch)
treef89e3ffcbf341693753fefd6dde7b260666d504e
parenta531699beeacf4ea3bc9aec6a30a9ffc6f9d0414 (diff)
downloadperlweeklychallenge-club-d6b046407de81e97c1babdf1064d017e71a0e3bb.tar.gz
perlweeklychallenge-club-d6b046407de81e97c1babdf1064d017e71a0e3bb.tar.bz2
perlweeklychallenge-club-d6b046407de81e97c1babdf1064d017e71a0e3bb.zip
Arne Sommer
-rw-r--r--challenge-328/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-328/arne-sommer/raku/ch-1.raku34
-rwxr-xr-xchallenge-328/arne-sommer/raku/ch-2.raku35
-rwxr-xr-xchallenge-328/arne-sommer/raku/good-string35
-rwxr-xr-xchallenge-328/arne-sommer/raku/replace-all-qm34
5 files changed, 139 insertions, 0 deletions
diff --git a/challenge-328/arne-sommer/blog.txt b/challenge-328/arne-sommer/blog.txt
new file mode 100644
index 0000000000..89e7fd30e0
--- /dev/null
+++ b/challenge-328/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/all-good.html
diff --git a/challenge-328/arne-sommer/raku/ch-1.raku b/challenge-328/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..c362d537b4
--- /dev/null
+++ b/challenge-328/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,34 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str ~~ /^<[a..z \?]>+$/,
+ :v(:$verbose));
+
+my @str = $str.comb;
+my $prev = '';
+my $result = '';
+my $end = @str.end;
+
+for 0 .. $end -> $index
+{
+ my $current = @str[$index];
+ my $next = $index >= $end ?? "" !! @str[$index +1];
+
+ if $current eq '?'
+ {
+ say ": Replace ? with anything != ($prev, $next)" if $verbose;
+ my $s = ('a' .. 'z') (-) ($prev, $next);
+ my $pick = $s.pick;
+ say ": From: { $s.keys.sort.join(",") } -> $pick" if $verbose;
+
+ $result ~= $pick;
+ $prev = $pick;
+ }
+ else
+ {
+ say ": Added normal letter $current" if $verbose;
+ $result ~= $current;
+ $prev = $current;
+ }
+}
+
+say $result;
diff --git a/challenge-328/arne-sommer/raku/ch-2.raku b/challenge-328/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..47736801f4
--- /dev/null
+++ b/challenge-328/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,35 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str is copy where $str ~~ /^<[ a..z A..Z ]>+$/,
+ :v(:$verbose));
+
+my $index = 0;
+
+loop
+{
+ my $end = $str.chars -1;
+ my $current = $str.substr($index, 1);
+
+ last if $end == -1;
+ last if $index == $end;
+
+ my $next = $str.substr($index +1, 1);
+
+ print ": Checking '$current$next' (index $index)" if $verbose;
+
+ if $current.lc eq $next.lc && $current ne $next
+ {
+ $str.substr-rw($index,2) = "";
+
+ say " - replace with nothing -> $str" if $verbose;
+
+ $index-- unless $index == 0;
+ }
+ else
+ {
+ say "" if $verbose;
+ $index++;
+ }
+}
+
+say $str;
diff --git a/challenge-328/arne-sommer/raku/good-string b/challenge-328/arne-sommer/raku/good-string
new file mode 100755
index 0000000000..47736801f4
--- /dev/null
+++ b/challenge-328/arne-sommer/raku/good-string
@@ -0,0 +1,35 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str is copy where $str ~~ /^<[ a..z A..Z ]>+$/,
+ :v(:$verbose));
+
+my $index = 0;
+
+loop
+{
+ my $end = $str.chars -1;
+ my $current = $str.substr($index, 1);
+
+ last if $end == -1;
+ last if $index == $end;
+
+ my $next = $str.substr($index +1, 1);
+
+ print ": Checking '$current$next' (index $index)" if $verbose;
+
+ if $current.lc eq $next.lc && $current ne $next
+ {
+ $str.substr-rw($index,2) = "";
+
+ say " - replace with nothing -> $str" if $verbose;
+
+ $index-- unless $index == 0;
+ }
+ else
+ {
+ say "" if $verbose;
+ $index++;
+ }
+}
+
+say $str;
diff --git a/challenge-328/arne-sommer/raku/replace-all-qm b/challenge-328/arne-sommer/raku/replace-all-qm
new file mode 100755
index 0000000000..c362d537b4
--- /dev/null
+++ b/challenge-328/arne-sommer/raku/replace-all-qm
@@ -0,0 +1,34 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str ~~ /^<[a..z \?]>+$/,
+ :v(:$verbose));
+
+my @str = $str.comb;
+my $prev = '';
+my $result = '';
+my $end = @str.end;
+
+for 0 .. $end -> $index
+{
+ my $current = @str[$index];
+ my $next = $index >= $end ?? "" !! @str[$index +1];
+
+ if $current eq '?'
+ {
+ say ": Replace ? with anything != ($prev, $next)" if $verbose;
+ my $s = ('a' .. 'z') (-) ($prev, $next);
+ my $pick = $s.pick;
+ say ": From: { $s.keys.sort.join(",") } -> $pick" if $verbose;
+
+ $result ~= $pick;
+ $prev = $pick;
+ }
+ else
+ {
+ say ": Added normal letter $current" if $verbose;
+ $result ~= $current;
+ $prev = $current;
+ }
+}
+
+say $result;