diff options
| author | Arne Sommer <arne@bbop.org> | 2025-02-09 20:16:55 +0100 |
|---|---|---|
| committer | Arne Sommer <arne@bbop.org> | 2025-02-09 20:16:55 +0100 |
| commit | 165bc275aa2c8752d3e250848bf9b6d56fac9570 (patch) | |
| tree | 568c639e52e0b6c509a78de0bde8de66a3cfbe0b /challenge-307 | |
| parent | b1e23cfc98218641b134e296583f244305e7258a (diff) | |
| download | perlweeklychallenge-club-165bc275aa2c8752d3e250848bf9b6d56fac9570.tar.gz perlweeklychallenge-club-165bc275aa2c8752d3e250848bf9b6d56fac9570.tar.bz2 perlweeklychallenge-club-165bc275aa2c8752d3e250848bf9b6d56fac9570.zip | |
Arne Sommer
Diffstat (limited to 'challenge-307')
| -rw-r--r-- | challenge-307/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-307/arne-sommer/raku/ch-1.raku | 23 | ||||
| -rwxr-xr-x | challenge-307/arne-sommer/raku/ch-2.raku | 30 | ||||
| -rwxr-xr-x | challenge-307/arne-sommer/raku/check-order | 23 | ||||
| -rwxr-xr-x | challenge-307/arne-sommer/raku/find-anagrams | 30 |
5 files changed, 107 insertions, 0 deletions
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; |
