aboutsummaryrefslogtreecommitdiff
path: root/challenge-331
diff options
context:
space:
mode:
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;