aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-01-19 16:40:39 +0000
committerGitHub <noreply@github.com>2025-01-19 16:40:39 +0000
commit1da87deaf285abe8adc6473474fda47aa952d25e (patch)
tree176c9441e09e3b556564e4db1f663e05e5f51355
parent30b67a650da7deebe85fdbdd0c7adc07fc6bb3de (diff)
parent28af7e8e723606542c0ea7864456b7547d9532ef (diff)
downloadperlweeklychallenge-club-1da87deaf285abe8adc6473474fda47aa952d25e.tar.gz
perlweeklychallenge-club-1da87deaf285abe8adc6473474fda47aa952d25e.tar.bz2
perlweeklychallenge-club-1da87deaf285abe8adc6473474fda47aa952d25e.zip
Merge pull request #11459 from arnesom/branch-for-challenge-304
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;