diff options
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; |
