aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Sommer <arne@bbop.org>2025-09-27 23:00:49 +0200
committerArne Sommer <arne@bbop.org>2025-09-27 23:00:49 +0200
commit7dc9380852a6b076343ab362bf976861dbd88784 (patch)
tree7bf5f5094e91a708bb0d5dd590b4e27c20628621
parent21dbd72f442864ad9b5866904c4553492923c0af (diff)
downloadperlweeklychallenge-club-7dc9380852a6b076343ab362bf976861dbd88784.tar.gz
perlweeklychallenge-club-7dc9380852a6b076343ab362bf976861dbd88784.tar.bz2
perlweeklychallenge-club-7dc9380852a6b076343ab362bf976861dbd88784.zip
week 340 Arne Sommer
-rw-r--r--challenge-340/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-340/arne-sommer/raku/ascending-numbers15
-rwxr-xr-xchallenge-340/arne-sommer/raku/ascending-numbers-pedantic41
-rwxr-xr-xchallenge-340/arne-sommer/raku/ch-1.raku25
-rwxr-xr-xchallenge-340/arne-sommer/raku/ch-2.raku15
-rwxr-xr-xchallenge-340/arne-sommer/raku/duplicate-removals25
6 files changed, 122 insertions, 0 deletions
diff --git a/challenge-340/arne-sommer/blog.txt b/challenge-340/arne-sommer/blog.txt
new file mode 100644
index 0000000000..ac714df47d
--- /dev/null
+++ b/challenge-340/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/ascending-duplicates.html \ No newline at end of file
diff --git a/challenge-340/arne-sommer/raku/ascending-numbers b/challenge-340/arne-sommer/raku/ascending-numbers
new file mode 100755
index 0000000000..f0c5881688
--- /dev/null
+++ b/challenge-340/arne-sommer/raku/ascending-numbers
@@ -0,0 +1,15 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str.chars > 0,
+ :v(:$verbose));
+
+my @words = $str.split(/\s/);
+my @integers = @words.grep: * ~~ /^ 0 | (<[1..9]> <[0..9]>*) $/;
+
+if $verbose
+{
+ say ": words: { @words.map({ "'$_'" }).join(", ") }";
+ say ": integers: { @integers.map({ "'$_'" }).join(", ") }";
+}
+
+say [<] @integers; \ No newline at end of file
diff --git a/challenge-340/arne-sommer/raku/ascending-numbers-pedantic b/challenge-340/arne-sommer/raku/ascending-numbers-pedantic
new file mode 100755
index 0000000000..172405d644
--- /dev/null
+++ b/challenge-340/arne-sommer/raku/ascending-numbers-pedantic
@@ -0,0 +1,41 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str.chars > 0,
+ :u(:$ucfirst),
+ :z(:$allow-zero),
+ :v(:$verbose));
+
+my @words = $str.split(/\s/);
+my $error = 0;
+my @integers;
+
+for @words -> $word
+{
+ print ": Token '$word'" if $verbose;
+
+ if $word ~~ /^ <[1..9]> <[0..9]>* $/
+ {
+ @integers.push: $word;
+ say " is a positive integer" if $verbose;
+ }
+ elsif $allow-zero && $word eq "0"
+ {
+ @integers.push: $word;
+ say " is a positive integer" if $verbose;
+ }
+ elsif $word ~~ /^ <[a..z]>+ $/
+ {
+ say " is an English lowercase word" if $verbose
+ }
+ elsif $ucfirst && $word ~~ /^ <[A..Z]><[a..z]>* $/
+ {
+ say " is an English lowercase word" if $verbose
+ }
+ else
+ {
+ say " is illegal";
+ $error++;
+ }
+}
+
+say $error ?? False !! [<] @integers;
diff --git a/challenge-340/arne-sommer/raku/ch-1.raku b/challenge-340/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..ddf9c78b23
--- /dev/null
+++ b/challenge-340/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,25 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str is copy where $str.chars > 0,
+ :v(:$verbose));
+
+my $index = 0;
+
+loop
+{
+ last if $index >= $str.chars -1;
+
+ if $str.substr($index,1) eq $str.substr($index +1,1)
+ {
+ say ": Index $index: Remove '{ $str.substr($index,2) }'" if $verbose;
+ $str.substr-rw($index,2) = "";
+ $index-- unless $index == 0;
+ }
+ else
+ {
+ say ": Index $index: Do nothing with '{ $str.substr($index,2) }'" if $verbose;
+ $index++;
+ }
+}
+
+say $str;
diff --git a/challenge-340/arne-sommer/raku/ch-2.raku b/challenge-340/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..f0c5881688
--- /dev/null
+++ b/challenge-340/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,15 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str.chars > 0,
+ :v(:$verbose));
+
+my @words = $str.split(/\s/);
+my @integers = @words.grep: * ~~ /^ 0 | (<[1..9]> <[0..9]>*) $/;
+
+if $verbose
+{
+ say ": words: { @words.map({ "'$_'" }).join(", ") }";
+ say ": integers: { @integers.map({ "'$_'" }).join(", ") }";
+}
+
+say [<] @integers; \ No newline at end of file
diff --git a/challenge-340/arne-sommer/raku/duplicate-removals b/challenge-340/arne-sommer/raku/duplicate-removals
new file mode 100755
index 0000000000..ddf9c78b23
--- /dev/null
+++ b/challenge-340/arne-sommer/raku/duplicate-removals
@@ -0,0 +1,25 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str is copy where $str.chars > 0,
+ :v(:$verbose));
+
+my $index = 0;
+
+loop
+{
+ last if $index >= $str.chars -1;
+
+ if $str.substr($index,1) eq $str.substr($index +1,1)
+ {
+ say ": Index $index: Remove '{ $str.substr($index,2) }'" if $verbose;
+ $str.substr-rw($index,2) = "";
+ $index-- unless $index == 0;
+ }
+ else
+ {
+ say ": Index $index: Do nothing with '{ $str.substr($index,2) }'" if $verbose;
+ $index++;
+ }
+}
+
+say $str;