aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Sommer <arne@bbop.org>2025-01-19 17:37:14 +0100
committerArne Sommer <arne@bbop.org>2025-01-19 17:37:14 +0100
commit28af7e8e723606542c0ea7864456b7547d9532ef (patch)
treeff5476842fb66be37fb2690a499f981433625501
parente558f6a4a91cd50561f693679b654f283c98f059 (diff)
downloadperlweeklychallenge-club-28af7e8e723606542c0ea7864456b7547d9532ef.tar.gz
perlweeklychallenge-club-28af7e8e723606542c0ea7864456b7547d9532ef.tar.bz2
perlweeklychallenge-club-28af7e8e723606542c0ea7864456b7547d9532ef.zip
Arne Sommer
-rw-r--r--challenge-304/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-304/arne-sommer/raku/arrange-binary33
-rwxr-xr-xchallenge-304/arne-sommer/raku/ch-1.raku33
-rwxr-xr-xchallenge-304/arne-sommer/raku/ch-2.raku25
-rwxr-xr-xchallenge-304/arne-sommer/raku/maximum-average25
5 files changed, 117 insertions, 0 deletions
diff --git a/challenge-304/arne-sommer/blog.txt b/challenge-304/arne-sommer/blog.txt
new file mode 100644
index 0000000000..2cb0747e07
--- /dev/null
+++ b/challenge-304/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/arranged-average.html
diff --git a/challenge-304/arne-sommer/raku/arrange-binary b/challenge-304/arne-sommer/raku/arrange-binary
new file mode 100755
index 0000000000..005395c6a0
--- /dev/null
+++ b/challenge-304/arne-sommer/raku/arrange-binary
@@ -0,0 +1,33 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints is copy where @ints.elems > 0 && all(@ints) eq any(0,1),
+ Int :$n where $n > 0,
+ :v(:$verbose));
+
+if @ints.join ~~ /11/
+{
+ say ':Found neighbourly 1s in the input' if $verbose;
+ say 'false';
+ exit;
+}
+
+my $replaced = 0;
+
+for 0 .. @ints.end -> $index
+{
+ if @ints[$index] == 0
+ {
+ if $index == 0 || @ints[$index -1] == 0
+ {
+ if $index == @ints.end || @ints[$index +1] == 0
+ {
+ @ints[$index] = 1;
+ $replaced++;
+
+ say ": Replaced #$replaced at index $index: [{ @ints.join(",") }]" if $verbose;
+ }
+ }
+ }
+}
+
+say $replaced >= $n ?? 'true' !! 'false';
diff --git a/challenge-304/arne-sommer/raku/ch-1.raku b/challenge-304/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..005395c6a0
--- /dev/null
+++ b/challenge-304/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,33 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints is copy where @ints.elems > 0 && all(@ints) eq any(0,1),
+ Int :$n where $n > 0,
+ :v(:$verbose));
+
+if @ints.join ~~ /11/
+{
+ say ':Found neighbourly 1s in the input' if $verbose;
+ say 'false';
+ exit;
+}
+
+my $replaced = 0;
+
+for 0 .. @ints.end -> $index
+{
+ if @ints[$index] == 0
+ {
+ if $index == 0 || @ints[$index -1] == 0
+ {
+ if $index == @ints.end || @ints[$index +1] == 0
+ {
+ @ints[$index] = 1;
+ $replaced++;
+
+ say ": Replaced #$replaced at index $index: [{ @ints.join(",") }]" if $verbose;
+ }
+ }
+ }
+}
+
+say $replaced >= $n ?? 'true' !! 'false';
diff --git a/challenge-304/arne-sommer/raku/ch-2.raku b/challenge-304/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..08c68477e1
--- /dev/null
+++ b/challenge-304/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,25 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int,
+ Int :$n where $n > 0 && $n <= @ints.elems,
+ :v(:$verbose));
+
+my $max-avg = -Inf;
+
+for 0 .. @ints.elems - $n -> $start
+{
+ my $avg = @ints[$start .. $start + $n -1].sum / $n;
+
+ if $avg > $max-avg
+ {
+ $max-avg = $avg;
+
+ say ": New maximum average $max-avg at index $start to { $start + $n -1 }" if $verbose;
+ }
+ elsif $verbose
+ {
+ say ": Not a new maximum average $max-avg at index $start to { $start + $n -1 }";
+ }
+}
+
+say $max-avg;
diff --git a/challenge-304/arne-sommer/raku/maximum-average b/challenge-304/arne-sommer/raku/maximum-average
new file mode 100755
index 0000000000..08c68477e1
--- /dev/null
+++ b/challenge-304/arne-sommer/raku/maximum-average
@@ -0,0 +1,25 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where @ints.elems > 0 && all(@ints) ~~ Int,
+ Int :$n where $n > 0 && $n <= @ints.elems,
+ :v(:$verbose));
+
+my $max-avg = -Inf;
+
+for 0 .. @ints.elems - $n -> $start
+{
+ my $avg = @ints[$start .. $start + $n -1].sum / $n;
+
+ if $avg > $max-avg
+ {
+ $max-avg = $avg;
+
+ say ": New maximum average $max-avg at index $start to { $start + $n -1 }" if $verbose;
+ }
+ elsif $verbose
+ {
+ say ": Not a new maximum average $max-avg at index $start to { $start + $n -1 }";
+ }
+}
+
+say $max-avg;