From 5af61d45f5ddbcea01ee0250f411de8396ee09e3 Mon Sep 17 00:00:00 2001 From: Arne Sommer Date: Fri, 31 Jan 2025 23:35:11 +0100 Subject: Arne Sommer --- challenge-306/arne-sommer/blog.txt | 1 + challenge-306/arne-sommer/raku/ch-1.raku | 22 +++++++++++++++++ challenge-306/arne-sommer/raku/ch-2.raku | 31 ++++++++++++++++++++++++ challenge-306/arne-sommer/raku/last-element | 31 ++++++++++++++++++++++++ challenge-306/arne-sommer/raku/last-element-sort | 28 +++++++++++++++++++++ challenge-306/arne-sommer/raku/odd-sum | 22 +++++++++++++++++ 6 files changed, 135 insertions(+) create mode 100644 challenge-306/arne-sommer/blog.txt create mode 100755 challenge-306/arne-sommer/raku/ch-1.raku create mode 100755 challenge-306/arne-sommer/raku/ch-2.raku create mode 100755 challenge-306/arne-sommer/raku/last-element create mode 100755 challenge-306/arne-sommer/raku/last-element-sort create mode 100755 challenge-306/arne-sommer/raku/odd-sum 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; -- cgit