aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Sommer <arne@bbop.org>2025-10-04 17:20:08 +0200
committerArne Sommer <arne@bbop.org>2025-10-04 17:20:08 +0200
commit630cba89c05c6190a669bef703b88aafc8ee3834 (patch)
treee448e9506f6c04b0bbea80db8e095b206f528ddc
parent9506417ade8b33371ed335c95719c3ad5bf83c33 (diff)
downloadperlweeklychallenge-club-630cba89c05c6190a669bef703b88aafc8ee3834.tar.gz
perlweeklychallenge-club-630cba89c05c6190a669bef703b88aafc8ee3834.tar.bz2
perlweeklychallenge-club-630cba89c05c6190a669bef703b88aafc8ee3834.zip
week 341 Arne Sommer
-rw-r--r--challenge-341/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-341/arne-sommer/raku/broken-keyboard20
-rwxr-xr-xchallenge-341/arne-sommer/raku/ch-1.raku20
-rwxr-xr-xchallenge-341/arne-sommer/raku/ch-2.raku29
-rwxr-xr-xchallenge-341/arne-sommer/raku/reverse-prefix29
5 files changed, 99 insertions, 0 deletions
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;
+}
+