From 630cba89c05c6190a669bef703b88aafc8ee3834 Mon Sep 17 00:00:00 2001 From: Arne Sommer Date: Sat, 4 Oct 2025 17:20:08 +0200 Subject: week 341 Arne Sommer --- challenge-341/arne-sommer/blog.txt | 1 + challenge-341/arne-sommer/raku/broken-keyboard | 20 ++++++++++++++++++ challenge-341/arne-sommer/raku/ch-1.raku | 20 ++++++++++++++++++ challenge-341/arne-sommer/raku/ch-2.raku | 29 ++++++++++++++++++++++++++ challenge-341/arne-sommer/raku/reverse-prefix | 29 ++++++++++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 challenge-341/arne-sommer/blog.txt create mode 100755 challenge-341/arne-sommer/raku/broken-keyboard create mode 100755 challenge-341/arne-sommer/raku/ch-1.raku create mode 100755 challenge-341/arne-sommer/raku/ch-2.raku create mode 100755 challenge-341/arne-sommer/raku/reverse-prefix diff --git a/challenge-341/arne-sommer/blog.txt b/challenge-341/arne-sommer/blog.txt new file mode 100644 index 0000000000..e8030b3714 --- /dev/null +++ b/challenge-341/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/reverse-broken-again.html \ No newline at end of file diff --git a/challenge-341/arne-sommer/raku/broken-keyboard b/challenge-341/arne-sommer/raku/broken-keyboard new file mode 100755 index 0000000000..a79fc83caf --- /dev/null +++ b/challenge-341/arne-sommer/raku/broken-keyboard @@ -0,0 +1,20 @@ +#! /usr/bin/env raku + +unit sub MAIN (:s(:$str) where $str ~~ /^ <[a..z A..Z \s]>+ $/, + :k(:$keys) where $keys ~~ /^ <[a..z]>* $/, + :v(:$verbose)); + +my @words = $str.lc.words; +my @keys = $keys.lc.comb; +my @typeable = @words.grep({ .contains(none(@keys)) }); + +die "Duplicate keys" if @keys.repeated; + +if $verbose +{ + say ": Words: { @words.map({ "'$_'" }).join(", ") }"; + say ": Keys: { @keys.map({ "'$_'" }).join(", ") }"; + say ": Typeable words: { @typeable.map({ "'$_'" }).join(", ") }"; +} + +say @typeable.elems; diff --git a/challenge-341/arne-sommer/raku/ch-1.raku b/challenge-341/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..a79fc83caf --- /dev/null +++ b/challenge-341/arne-sommer/raku/ch-1.raku @@ -0,0 +1,20 @@ +#! /usr/bin/env raku + +unit sub MAIN (:s(:$str) where $str ~~ /^ <[a..z A..Z \s]>+ $/, + :k(:$keys) where $keys ~~ /^ <[a..z]>* $/, + :v(:$verbose)); + +my @words = $str.lc.words; +my @keys = $keys.lc.comb; +my @typeable = @words.grep({ .contains(none(@keys)) }); + +die "Duplicate keys" if @keys.repeated; + +if $verbose +{ + say ": Words: { @words.map({ "'$_'" }).join(", ") }"; + say ": Keys: { @keys.map({ "'$_'" }).join(", ") }"; + say ": Typeable words: { @typeable.map({ "'$_'" }).join(", ") }"; +} + +say @typeable.elems; diff --git a/challenge-341/arne-sommer/raku/ch-2.raku b/challenge-341/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..6fed7269f9 --- /dev/null +++ b/challenge-341/arne-sommer/raku/ch-2.raku @@ -0,0 +1,29 @@ +#! /usr/bin/env raku + +unit sub MAIN (:s($str) where $str.chars > 0, + :c($char) where $char.chars == 1, + :v(:$verbose)); + +my $index = $str.index($char); + +if $index +{ + my $pre = $str.substr(0, $index +1); + my $flipped = $pre.flip; + my $post = $str.substr($index +1); + + if $verbose + { + say ": Index: $index"; + say ": Pre: '$pre'"; + say ": Flipped: '$flipped'"; + say ": Post: '$post'"; + } + + say $flipped ~ $post; +} +else +{ + say $str; +} + diff --git a/challenge-341/arne-sommer/raku/reverse-prefix b/challenge-341/arne-sommer/raku/reverse-prefix new file mode 100755 index 0000000000..6fed7269f9 --- /dev/null +++ b/challenge-341/arne-sommer/raku/reverse-prefix @@ -0,0 +1,29 @@ +#! /usr/bin/env raku + +unit sub MAIN (:s($str) where $str.chars > 0, + :c($char) where $char.chars == 1, + :v(:$verbose)); + +my $index = $str.index($char); + +if $index +{ + my $pre = $str.substr(0, $index +1); + my $flipped = $pre.flip; + my $post = $str.substr($index +1); + + if $verbose + { + say ": Index: $index"; + say ": Pre: '$pre'"; + say ": Flipped: '$flipped'"; + say ": Post: '$post'"; + } + + say $flipped ~ $post; +} +else +{ + say $str; +} + -- cgit