From bc0c7033bf770fcb08dc4e0a060832bc63b81e51 Mon Sep 17 00:00:00 2001 From: Arne Sommer Date: Sun, 2 Nov 2025 00:05:58 +0100 Subject: week 345 Arne Sommer --- challenge-345/arne-sommer/blog.txt | 1 + challenge-345/arne-sommer/raku/ch-1.raku | 27 +++++++++++++++++++ challenge-345/arne-sommer/raku/ch-2.raku | 37 +++++++++++++++++++++++++++ challenge-345/arne-sommer/raku/last-visitor | 37 +++++++++++++++++++++++++++ challenge-345/arne-sommer/raku/peak-positions | 27 +++++++++++++++++++ 5 files changed, 129 insertions(+) create mode 100644 challenge-345/arne-sommer/blog.txt create mode 100755 challenge-345/arne-sommer/raku/ch-1.raku create mode 100755 challenge-345/arne-sommer/raku/ch-2.raku create mode 100755 challenge-345/arne-sommer/raku/last-visitor create mode 100755 challenge-345/arne-sommer/raku/peak-positions diff --git a/challenge-345/arne-sommer/blog.txt b/challenge-345/arne-sommer/blog.txt new file mode 100644 index 0000000000..a544302c19 --- /dev/null +++ b/challenge-345/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/last-peak.html \ No newline at end of file diff --git a/challenge-345/arne-sommer/raku/ch-1.raku b/challenge-345/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..3db88e2db9 --- /dev/null +++ b/challenge-345/arne-sommer/raku/ch-1.raku @@ -0,0 +1,27 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int, + :s(:$strictly), + :v(:$verbose)); + +my $i-offset = 0; + +unless $strictly +{ + @ints.unshift: -Inf; + @ints.push: -Inf; + $i-offset = -1; +} + +my @indices; + +for 1 .. @ints.end - 1 -> $i +{ + my $peak = @ints[$i -1] < @ints[$i] > @ints[$i +1]; + + say ": index { $i + $i-offset } (@ints[$i -1] < @ints[$i] > @ints[$i +1]) : $peak" if $verbose; + + @indices.push($i + $i-offset) if $peak; +} + +say "({ @indices.join(",") })"; \ No newline at end of file diff --git a/challenge-345/arne-sommer/raku/ch-2.raku b/challenge-345/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..6d5ce46e3b --- /dev/null +++ b/challenge-345/arne-sommer/raku/ch-2.raku @@ -0,0 +1,37 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int, + :v(:$verbose)); + +my @seen; +my @ans; + +my $x = 0; + +for @ints -> $int +{ + if $int > 0 + { + $x = 0; + @seen.unshift: $int; + } + elsif $int == -1 + { + if $x < @seen.elems + { + @ans.push: @seen[$x]; + } + else + { + @ans.push: -1; + } + $x++; + } + else + { + die "Illegal value $int (legal values: -1,1,2,3,..)"; + } + say ": $int -> seen: { @seen.join(",") } ans: { @ans.join(",") }" if $verbose; +} + +say "({ @ans.join(",") })"; \ No newline at end of file diff --git a/challenge-345/arne-sommer/raku/last-visitor b/challenge-345/arne-sommer/raku/last-visitor new file mode 100755 index 0000000000..6d5ce46e3b --- /dev/null +++ b/challenge-345/arne-sommer/raku/last-visitor @@ -0,0 +1,37 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int, + :v(:$verbose)); + +my @seen; +my @ans; + +my $x = 0; + +for @ints -> $int +{ + if $int > 0 + { + $x = 0; + @seen.unshift: $int; + } + elsif $int == -1 + { + if $x < @seen.elems + { + @ans.push: @seen[$x]; + } + else + { + @ans.push: -1; + } + $x++; + } + else + { + die "Illegal value $int (legal values: -1,1,2,3,..)"; + } + say ": $int -> seen: { @seen.join(",") } ans: { @ans.join(",") }" if $verbose; +} + +say "({ @ans.join(",") })"; \ No newline at end of file diff --git a/challenge-345/arne-sommer/raku/peak-positions b/challenge-345/arne-sommer/raku/peak-positions new file mode 100755 index 0000000000..3db88e2db9 --- /dev/null +++ b/challenge-345/arne-sommer/raku/peak-positions @@ -0,0 +1,27 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int, + :s(:$strictly), + :v(:$verbose)); + +my $i-offset = 0; + +unless $strictly +{ + @ints.unshift: -Inf; + @ints.push: -Inf; + $i-offset = -1; +} + +my @indices; + +for 1 .. @ints.end - 1 -> $i +{ + my $peak = @ints[$i -1] < @ints[$i] > @ints[$i +1]; + + say ": index { $i + $i-offset } (@ints[$i -1] < @ints[$i] > @ints[$i +1]) : $peak" if $verbose; + + @indices.push($i + $i-offset) if $peak; +} + +say "({ @indices.join(",") })"; \ No newline at end of file -- cgit