diff options
| author | Arne Sommer <arne@bbop.org> | 2025-07-05 23:28:33 +0200 |
|---|---|---|
| committer | Arne Sommer <arne@bbop.org> | 2025-07-05 23:28:33 +0200 |
| commit | d6b046407de81e97c1babdf1064d017e71a0e3bb (patch) | |
| tree | f89e3ffcbf341693753fefd6dde7b260666d504e | |
| parent | a531699beeacf4ea3bc9aec6a30a9ffc6f9d0414 (diff) | |
| download | perlweeklychallenge-club-d6b046407de81e97c1babdf1064d017e71a0e3bb.tar.gz perlweeklychallenge-club-d6b046407de81e97c1babdf1064d017e71a0e3bb.tar.bz2 perlweeklychallenge-club-d6b046407de81e97c1babdf1064d017e71a0e3bb.zip | |
Arne Sommer
| -rw-r--r-- | challenge-328/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-328/arne-sommer/raku/ch-1.raku | 34 | ||||
| -rwxr-xr-x | challenge-328/arne-sommer/raku/ch-2.raku | 35 | ||||
| -rwxr-xr-x | challenge-328/arne-sommer/raku/good-string | 35 | ||||
| -rwxr-xr-x | challenge-328/arne-sommer/raku/replace-all-qm | 34 |
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; |
