diff options
| author | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2025-07-23 22:29:32 +0100 |
|---|---|---|
| committer | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2025-07-23 22:29:32 +0100 |
| commit | 1133deffe417e44310790a0d58a11fe9312e2e5a (patch) | |
| tree | 0415502b369c3febda5e23b678f012659cbfd0be /challenge-331 | |
| parent | 341ef64e3d8a51b177f3e6f5a86b7d95d47c81c5 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-331/arne-sommer/raku/buddy-strings | 31 | ||||
| -rw-r--r-- | challenge-331/arne-sommer/raku/buddy-strings-ok | 36 | ||||
| -rw-r--r-- | challenge-331/arne-sommer/raku/ch-1.raku | 8 | ||||
| -rw-r--r-- | challenge-331/arne-sommer/raku/ch-2.raku | 36 | ||||
| -rw-r--r-- | challenge-331/arne-sommer/raku/last-word | 8 |
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; |
