From 165bc275aa2c8752d3e250848bf9b6d56fac9570 Mon Sep 17 00:00:00 2001 From: Arne Sommer Date: Sun, 9 Feb 2025 20:16:55 +0100 Subject: Arne Sommer --- challenge-307/arne-sommer/blog.txt | 1 + challenge-307/arne-sommer/raku/ch-1.raku | 23 +++++++++++++++++++++ challenge-307/arne-sommer/raku/ch-2.raku | 30 ++++++++++++++++++++++++++++ challenge-307/arne-sommer/raku/check-order | 23 +++++++++++++++++++++ challenge-307/arne-sommer/raku/find-anagrams | 30 ++++++++++++++++++++++++++++ 5 files changed, 107 insertions(+) create mode 100644 challenge-307/arne-sommer/blog.txt create mode 100755 challenge-307/arne-sommer/raku/ch-1.raku create mode 100755 challenge-307/arne-sommer/raku/ch-2.raku create mode 100755 challenge-307/arne-sommer/raku/check-order create mode 100755 challenge-307/arne-sommer/raku/find-anagrams diff --git a/challenge-307/arne-sommer/blog.txt b/challenge-307/arne-sommer/blog.txt new file mode 100644 index 0000000000..9e4f58421f --- /dev/null +++ b/challenge-307/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/find-check.html diff --git a/challenge-307/arne-sommer/raku/ch-1.raku b/challenge-307/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..7cdcfc635f --- /dev/null +++ b/challenge-307/arne-sommer/raku/ch-1.raku @@ -0,0 +1,23 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems >= 2 && all(@ints) ~~ Int, + :v(:$verbose)); + +my @ordered = @ints.sort; + +my @indices; + +for ^@ints.elems -> $index +{ + if @ints[$index] == @ordered[$index] + { + say ": Index $index: @ints[$index] == @ordered[$index] *" if $verbose; + } + else + { + @indices.push: $index; + say ": Index $index: @ints[$index] != @ordered[$index]" if $verbose; + } +} + +say "({ @indices.join(", ") })"; diff --git a/challenge-307/arne-sommer/raku/ch-2.raku b/challenge-307/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..7e36e25b6e --- /dev/null +++ b/challenge-307/arne-sommer/raku/ch-2.raku @@ -0,0 +1,30 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@words where @words.elems > 0, :v(:$verbose)); + +my %canonical; + +@words.map({ %canonical{$_} = $_.lc.comb.sort.join }); + +@words.map({ say ": Canonical of: $_ -> %canonical{$_}" }) if $verbose; + +my $index = 0; + +loop +{ + last if @words.elems == 0; + last if @words.end == $index; + + if %canonical{@words[$index + 0]} eq %canonical{@words[$index + 1]} + { + print ": Dropping @words[$index + 0] (index $index)" if $verbose; + @words.splice($index,1); + say " -> ({ @words.join(",") })" if $verbose; + } + else + { + $index++; + } +} + +say @words.elems; diff --git a/challenge-307/arne-sommer/raku/check-order b/challenge-307/arne-sommer/raku/check-order new file mode 100755 index 0000000000..7cdcfc635f --- /dev/null +++ b/challenge-307/arne-sommer/raku/check-order @@ -0,0 +1,23 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems >= 2 && all(@ints) ~~ Int, + :v(:$verbose)); + +my @ordered = @ints.sort; + +my @indices; + +for ^@ints.elems -> $index +{ + if @ints[$index] == @ordered[$index] + { + say ": Index $index: @ints[$index] == @ordered[$index] *" if $verbose; + } + else + { + @indices.push: $index; + say ": Index $index: @ints[$index] != @ordered[$index]" if $verbose; + } +} + +say "({ @indices.join(", ") })"; diff --git a/challenge-307/arne-sommer/raku/find-anagrams b/challenge-307/arne-sommer/raku/find-anagrams new file mode 100755 index 0000000000..7e36e25b6e --- /dev/null +++ b/challenge-307/arne-sommer/raku/find-anagrams @@ -0,0 +1,30 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@words where @words.elems > 0, :v(:$verbose)); + +my %canonical; + +@words.map({ %canonical{$_} = $_.lc.comb.sort.join }); + +@words.map({ say ": Canonical of: $_ -> %canonical{$_}" }) if $verbose; + +my $index = 0; + +loop +{ + last if @words.elems == 0; + last if @words.end == $index; + + if %canonical{@words[$index + 0]} eq %canonical{@words[$index + 1]} + { + print ": Dropping @words[$index + 0] (index $index)" if $verbose; + @words.splice($index,1); + say " -> ({ @words.join(",") })" if $verbose; + } + else + { + $index++; + } +} + +say @words.elems; -- cgit