aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;