aboutsummaryrefslogtreecommitdiff
path: root/challenge-331
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <mohammad.anwar@yahoo.com>2025-07-23 22:29:32 +0100
committerMohammad Sajid Anwar <mohammad.anwar@yahoo.com>2025-07-23 22:29:32 +0100
commit1133deffe417e44310790a0d58a11fe9312e2e5a (patch)
tree0415502b369c3febda5e23b678f012659cbfd0be /challenge-331
parent341ef64e3d8a51b177f3e6f5a86b7d95d47c81c5 (diff)
downloadperlweeklychallenge-club-1133deffe417e44310790a0d58a11fe9312e2e5a.tar.gz
perlweeklychallenge-club-1133deffe417e44310790a0d58a11fe9312e2e5a.tar.bz2
perlweeklychallenge-club-1133deffe417e44310790a0d58a11fe9312e2e5a.zip
- Added solutions by Arne Sommer.
- Added solutions by Yitzchak Scott-Thoennes.
Diffstat (limited to 'challenge-331')
-rw-r--r--challenge-331/arne-sommer/blog.txt1
-rw-r--r--challenge-331/arne-sommer/raku/buddy-strings31
-rw-r--r--challenge-331/arne-sommer/raku/buddy-strings-ok36
-rw-r--r--challenge-331/arne-sommer/raku/ch-1.raku8
-rw-r--r--challenge-331/arne-sommer/raku/ch-2.raku36
-rw-r--r--challenge-331/arne-sommer/raku/last-word8
6 files changed, 120 insertions, 0 deletions
diff --git a/challenge-331/arne-sommer/blog.txt b/challenge-331/arne-sommer/blog.txt
new file mode 100644
index 0000000000..c4a6aca374
--- /dev/null
+++ b/challenge-331/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/last-buddy.html
diff --git a/challenge-331/arne-sommer/raku/buddy-strings b/challenge-331/arne-sommer/raku/buddy-strings
new file mode 100644
index 0000000000..de7a7672c2
--- /dev/null
+++ b/challenge-331/arne-sommer/raku/buddy-strings
@@ -0,0 +1,31 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($source where $source.chars > 0,
+ $destination where $destination.chars > 0,
+ :v(:$verbose));
+
+if $destination.chars != $source.chars
+{
+ say ": Different string lengths; { $source.chars } vs { $destination.chars }"
+ if $verbose;
+ say False;
+}
+else
+{
+ my @pairs = $source.comb Z $destination.comb;
+ say ": Pairs: { @pairs.raku }" if $verbose;
+
+ my @changes = @pairs.grep({ $_[0] ne $_[1] });
+ say ": Pairs with changes: { @changes.raku }" if $verbose;
+
+ if @changes.elems == 2
+ {
+ say @changes[0][0] eq @changes[1][1] &&
+ @changes[1][1] eq @changes[0][0];
+ }
+ else
+ {
+ say ": Not two pairs of letters that differ, got { @changes.elems}" if $verbose;
+ say False;
+ }
+}
diff --git a/challenge-331/arne-sommer/raku/buddy-strings-ok b/challenge-331/arne-sommer/raku/buddy-strings-ok
new file mode 100644
index 0000000000..ae91b7cf5a
--- /dev/null
+++ b/challenge-331/arne-sommer/raku/buddy-strings-ok
@@ -0,0 +1,36 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($source where $source.chars > 0,
+ $destination where $destination.chars > 0,
+ :v(:$verbose));
+
+if $destination.chars != $source.chars
+{
+ say ": Different string lengths; { $source.chars } vs { $destination.chars }"
+ if $verbose;
+ say False;
+}
+else
+{
+ my @pairs = $source.comb Z $destination.comb;
+ say ": Pairs: { @pairs.raku }" if $verbose;
+
+ my @changes = @pairs.grep({ $_[0] ne $_[1] });
+ say ": Pairs with changes: { @changes.raku }" if $verbose;
+
+ if @changes.elems == 2
+ {
+ say @changes[0][0] eq @changes[1][1] &&
+ @changes[1][1] eq @changes[0][0];
+ }
+ elsif @changes.elems == 0 && $source.comb.repeated.elems
+ {
+ say ": Identical strings, but we can swap duplicates" if $verbose;
+ say True;
+ }
+ else
+ {
+ say ": Not two pairs of letters that differ, got { @changes.elems}" if $verbose;
+ say False;
+ }
+}
diff --git a/challenge-331/arne-sommer/raku/ch-1.raku b/challenge-331/arne-sommer/raku/ch-1.raku
new file mode 100644
index 0000000000..72da332298
--- /dev/null
+++ b/challenge-331/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,8 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str.chars > 0,
+ :v(:$verbose));
+
+say ": Last word: '{ $str.words.tail }'" if $verbose;
+
+say $str.words.tail.chars;
diff --git a/challenge-331/arne-sommer/raku/ch-2.raku b/challenge-331/arne-sommer/raku/ch-2.raku
new file mode 100644
index 0000000000..ae91b7cf5a
--- /dev/null
+++ b/challenge-331/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,36 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($source where $source.chars > 0,
+ $destination where $destination.chars > 0,
+ :v(:$verbose));
+
+if $destination.chars != $source.chars
+{
+ say ": Different string lengths; { $source.chars } vs { $destination.chars }"
+ if $verbose;
+ say False;
+}
+else
+{
+ my @pairs = $source.comb Z $destination.comb;
+ say ": Pairs: { @pairs.raku }" if $verbose;
+
+ my @changes = @pairs.grep({ $_[0] ne $_[1] });
+ say ": Pairs with changes: { @changes.raku }" if $verbose;
+
+ if @changes.elems == 2
+ {
+ say @changes[0][0] eq @changes[1][1] &&
+ @changes[1][1] eq @changes[0][0];
+ }
+ elsif @changes.elems == 0 && $source.comb.repeated.elems
+ {
+ say ": Identical strings, but we can swap duplicates" if $verbose;
+ say True;
+ }
+ else
+ {
+ say ": Not two pairs of letters that differ, got { @changes.elems}" if $verbose;
+ say False;
+ }
+}
diff --git a/challenge-331/arne-sommer/raku/last-word b/challenge-331/arne-sommer/raku/last-word
new file mode 100644
index 0000000000..72da332298
--- /dev/null
+++ b/challenge-331/arne-sommer/raku/last-word
@@ -0,0 +1,8 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($str where $str.chars > 0,
+ :v(:$verbose));
+
+say ": Last word: '{ $str.words.tail }'" if $verbose;
+
+say $str.words.tail.chars;