diff options
| author | Arne Sommer <arne@bbop.org> | 2025-09-27 23:00:49 +0200 |
|---|---|---|
| committer | Arne Sommer <arne@bbop.org> | 2025-09-27 23:00:49 +0200 |
| commit | 7dc9380852a6b076343ab362bf976861dbd88784 (patch) | |
| tree | 7bf5f5094e91a708bb0d5dd590b4e27c20628621 | |
| parent | 21dbd72f442864ad9b5866904c4553492923c0af (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-340/arne-sommer/raku/ascending-numbers | 15 | ||||
| -rwxr-xr-x | challenge-340/arne-sommer/raku/ascending-numbers-pedantic | 41 | ||||
| -rwxr-xr-x | challenge-340/arne-sommer/raku/ch-1.raku | 25 | ||||
| -rwxr-xr-x | challenge-340/arne-sommer/raku/ch-2.raku | 15 | ||||
| -rwxr-xr-x | challenge-340/arne-sommer/raku/duplicate-removals | 25 |
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; |
