aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-306/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-306/arne-sommer/raku/ch-1.raku22
-rwxr-xr-xchallenge-306/arne-sommer/raku/ch-2.raku31
-rwxr-xr-xchallenge-306/arne-sommer/raku/last-element31
-rwxr-xr-xchallenge-306/arne-sommer/raku/last-element-sort28
-rwxr-xr-xchallenge-306/arne-sommer/raku/odd-sum22
6 files changed, 135 insertions, 0 deletions
diff --git a/challenge-306/arne-sommer/blog.txt b/challenge-306/arne-sommer/blog.txt
new file mode 100644
index 0000000000..571da8edc5
--- /dev/null
+++ b/challenge-306/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/elementary-odd.html
diff --git a/challenge-306/arne-sommer/raku/ch-1.raku b/challenge-306/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..8b6a3633a5
--- /dev/null
+++ b/challenge-306/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int && all(@ints) > 0,
+ :v(:$verbose));
+
+my $end = @ints.end;
+my $sum = 0;
+
+for 0 .. $end -> $start
+{
+ for $start .. $end -> $stop
+ {
+ next unless ($stop - $start) %% 2;
+ my @slice = @ints[$start .. $stop];
+ my $total = @slice.sum;
+ $sum += $total;
+
+ say ": Slice Indices:$start:$stop Values:({ @slice.join(",") }) Sum:$total Total:$sum" if $verbose;
+ }
+}
+
+say $sum;
diff --git a/challenge-306/arne-sommer/raku/ch-2.raku b/challenge-306/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..8709e83d53
--- /dev/null
+++ b/challenge-306/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,31 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int,
+ :v(:$verbose));
+
+while @ints.elems >= 2
+{
+ my @x-index = @ints.max(:k);
+ my $x = @ints[@x-index[0]];
+
+ sink @ints.splice(@x-index[0], 1);
+
+ if @x-index.elems > 1
+ {
+ my @y-index = @ints.max(:k);
+ sink @ints.splice(@y-index[0], 1);
+ say ": Removed x:$x and y:$x -> ({ @ints.join(",") })" if $verbose;
+ }
+ else
+ {
+ my @y-index = @ints.max(:k);
+ my $y = @ints[@y-index[0]];
+ my $replace = $x - $y;
+
+ sink @ints.splice(@y-index[0], 1, $replace);
+
+ say ": Removed x:$x, replaced y:$y with $replace -> ({ @ints.join(",") })" if $verbose;
+ }
+}
+
+say @ints.elems ?? @ints.head !! 0;
diff --git a/challenge-306/arne-sommer/raku/last-element b/challenge-306/arne-sommer/raku/last-element
new file mode 100755
index 0000000000..8709e83d53
--- /dev/null
+++ b/challenge-306/arne-sommer/raku/last-element
@@ -0,0 +1,31 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int,
+ :v(:$verbose));
+
+while @ints.elems >= 2
+{
+ my @x-index = @ints.max(:k);
+ my $x = @ints[@x-index[0]];
+
+ sink @ints.splice(@x-index[0], 1);
+
+ if @x-index.elems > 1
+ {
+ my @y-index = @ints.max(:k);
+ sink @ints.splice(@y-index[0], 1);
+ say ": Removed x:$x and y:$x -> ({ @ints.join(",") })" if $verbose;
+ }
+ else
+ {
+ my @y-index = @ints.max(:k);
+ my $y = @ints[@y-index[0]];
+ my $replace = $x - $y;
+
+ sink @ints.splice(@y-index[0], 1, $replace);
+
+ say ": Removed x:$x, replaced y:$y with $replace -> ({ @ints.join(",") })" if $verbose;
+ }
+}
+
+say @ints.elems ?? @ints.head !! 0;
diff --git a/challenge-306/arne-sommer/raku/last-element-sort b/challenge-306/arne-sommer/raku/last-element-sort
new file mode 100755
index 0000000000..91ba72492d
--- /dev/null
+++ b/challenge-306/arne-sommer/raku/last-element-sort
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int,
+ :v(:$verbose));
+
+my @sorted = @ints.sort(-*);
+
+say ":Sorted: { @sorted.join(",") }" if $verbose;
+
+while @sorted.elems >= 2
+{
+ my $y = @sorted.shift;
+ my $x = @sorted.shift;
+
+ if $x == $y
+ {
+ say ":Removed x:$x and y:$y -> ({ @sorted.join(",") })" if $verbose;
+ }
+ else
+ {
+ my $replace = $y - $x;
+ @sorted.push: $replace;
+ @sorted .= sort(-*);
+ say ":Replaced x:$x and y:$y with $replace -> ({ @sorted.join(",") })" if $verbose;
+ }
+}
+
+say @sorted.elems ?? @sorted.head !! 0;
diff --git a/challenge-306/arne-sommer/raku/odd-sum b/challenge-306/arne-sommer/raku/odd-sum
new file mode 100755
index 0000000000..8b6a3633a5
--- /dev/null
+++ b/challenge-306/arne-sommer/raku/odd-sum
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@ints where all(@ints) ~~ Int && all(@ints) > 0,
+ :v(:$verbose));
+
+my $end = @ints.end;
+my $sum = 0;
+
+for 0 .. $end -> $start
+{
+ for $start .. $end -> $stop
+ {
+ next unless ($stop - $start) %% 2;
+ my @slice = @ints[$start .. $stop];
+ my $total = @slice.sum;
+ $sum += $total;
+
+ say ": Slice Indices:$start:$stop Values:({ @slice.join(",") }) Sum:$total Total:$sum" if $verbose;
+ }
+}
+
+say $sum;