aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-10-05 19:47:27 +0100
committerGitHub <noreply@github.com>2025-10-05 19:47:27 +0100
commitd05dccdf6a24178a492faf123a25a7dda21d4769 (patch)
tree71bd7a2720ebda65c29e0fcdb001f2b3bce6ea49
parent2acd992c0693e1842fddac63ee5ce621898aa70c (diff)
parent630cba89c05c6190a669bef703b88aafc8ee3834 (diff)
downloadperlweeklychallenge-club-d05dccdf6a24178a492faf123a25a7dda21d4769.tar.gz
perlweeklychallenge-club-d05dccdf6a24178a492faf123a25a7dda21d4769.tar.bz2
perlweeklychallenge-club-d05dccdf6a24178a492faf123a25a7dda21d4769.zip
Merge pull request #12787 from arnesom/challenge-341-arne-sommer
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;
+}
+