diff options
| author | Arne Sommer <arne@bbop.org> | 2025-11-02 00:05:58 +0100 |
|---|---|---|
| committer | Arne Sommer <arne@bbop.org> | 2025-11-02 00:05:58 +0100 |
| commit | bc0c7033bf770fcb08dc4e0a060832bc63b81e51 (patch) | |
| tree | 7f2662b1c7b943a6a8eec973c753092a815b0d8d | |
| parent | c68ac36f5dd0474818a10da0e14593ca0881c35f (diff) | |
| download | perlweeklychallenge-club-bc0c7033bf770fcb08dc4e0a060832bc63b81e51.tar.gz perlweeklychallenge-club-bc0c7033bf770fcb08dc4e0a060832bc63b81e51.tar.bz2 perlweeklychallenge-club-bc0c7033bf770fcb08dc4e0a060832bc63b81e51.zip | |
week 345 Arne Sommer
| -rw-r--r-- | challenge-345/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-345/arne-sommer/raku/ch-1.raku | 27 | ||||
| -rwxr-xr-x | challenge-345/arne-sommer/raku/ch-2.raku | 37 | ||||
| -rwxr-xr-x | challenge-345/arne-sommer/raku/last-visitor | 37 | ||||
| -rwxr-xr-x | challenge-345/arne-sommer/raku/peak-positions | 27 |
5 files changed, 129 insertions, 0 deletions
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 |
