aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Sommer <arne@bbop.org>2025-11-02 00:05:58 +0100
committerArne Sommer <arne@bbop.org>2025-11-02 00:05:58 +0100
commitbc0c7033bf770fcb08dc4e0a060832bc63b81e51 (patch)
tree7f2662b1c7b943a6a8eec973c753092a815b0d8d
parentc68ac36f5dd0474818a10da0e14593ca0881c35f (diff)
downloadperlweeklychallenge-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.txt1
-rwxr-xr-xchallenge-345/arne-sommer/raku/ch-1.raku27
-rwxr-xr-xchallenge-345/arne-sommer/raku/ch-2.raku37
-rwxr-xr-xchallenge-345/arne-sommer/raku/last-visitor37
-rwxr-xr-xchallenge-345/arne-sommer/raku/peak-positions27
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