From 84c47d8a96da34fad09ccd27d2b51a1828039ffb Mon Sep 17 00:00:00 2001 From: Arne Sommer Date: Sun, 21 Sep 2025 14:16:13 +0200 Subject: week 339 Arne Sommer --- challenge-339/arne-sommer/blog.txt | 1 + challenge-339/arne-sommer/raku/ch-1.raku | 27 +++++++++++++++++++++++++++ challenge-339/arne-sommer/raku/ch-2.raku | 29 +++++++++++++++++++++++++++++ challenge-339/arne-sommer/raku/max-diff | 27 +++++++++++++++++++++++++++ challenge-339/arne-sommer/raku/peak-point | 29 +++++++++++++++++++++++++++++ 5 files changed, 113 insertions(+) create mode 100644 challenge-339/arne-sommer/blog.txt create mode 100755 challenge-339/arne-sommer/raku/ch-1.raku create mode 100755 challenge-339/arne-sommer/raku/ch-2.raku create mode 100755 challenge-339/arne-sommer/raku/max-diff create mode 100755 challenge-339/arne-sommer/raku/peak-point diff --git a/challenge-339/arne-sommer/blog.txt b/challenge-339/arne-sommer/blog.txt new file mode 100644 index 0000000000..d3bc43157d --- /dev/null +++ b/challenge-339/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/diff-peak.html \ No newline at end of file diff --git a/challenge-339/arne-sommer/raku/ch-1.raku b/challenge-339/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..4e08a9eeb4 --- /dev/null +++ b/challenge-339/arne-sommer/raku/ch-1.raku @@ -0,0 +1,27 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems >= 4 && all(@ints) ~~ Int, + :v(:$verbose)); + +my $max = -Inf; + +for @ints.combinations(4) -> @comb +{ + for (@comb.permutations)[0,2,4] -> @perm + { + my $diff = (( @perm[0] * @perm[1] ) - ( @perm[2] * @perm[3] )).abs; + + print ": (@perm[0] * @perm[1]) - (@perm[2] * @perm[3]) = $diff" if $verbose; + + if ($diff > $max) + { + $max = $diff; + say " (new max)" if $verbose; + } + elsif $verbose + { + say ''; + } + } +} +say $max; diff --git a/challenge-339/arne-sommer/raku/ch-2.raku b/challenge-339/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..4edfb7f5c3 --- /dev/null +++ b/challenge-339/arne-sommer/raku/ch-2.raku @@ -0,0 +1,29 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@gain where @gain.elems >= 1 && all(@gain) ~~ Int, + :v(:$verbose)); + +my $max = 0; +my $current = 0; + +say ": Start at 0 (new max)" if $verbose; + +for @gain -> $change +{ + print ": $current + $change = { $current + $change }" if $verbose; + + $current += $change; + + if ($current > $max) + { + say " (new max)" if $verbose; + + $max = $current; + } + elsif $verbose + { + say ''; + } +} + +say $max; diff --git a/challenge-339/arne-sommer/raku/max-diff b/challenge-339/arne-sommer/raku/max-diff new file mode 100755 index 0000000000..4e08a9eeb4 --- /dev/null +++ b/challenge-339/arne-sommer/raku/max-diff @@ -0,0 +1,27 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@ints where @ints.elems >= 4 && all(@ints) ~~ Int, + :v(:$verbose)); + +my $max = -Inf; + +for @ints.combinations(4) -> @comb +{ + for (@comb.permutations)[0,2,4] -> @perm + { + my $diff = (( @perm[0] * @perm[1] ) - ( @perm[2] * @perm[3] )).abs; + + print ": (@perm[0] * @perm[1]) - (@perm[2] * @perm[3]) = $diff" if $verbose; + + if ($diff > $max) + { + $max = $diff; + say " (new max)" if $verbose; + } + elsif $verbose + { + say ''; + } + } +} +say $max; diff --git a/challenge-339/arne-sommer/raku/peak-point b/challenge-339/arne-sommer/raku/peak-point new file mode 100755 index 0000000000..4edfb7f5c3 --- /dev/null +++ b/challenge-339/arne-sommer/raku/peak-point @@ -0,0 +1,29 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@gain where @gain.elems >= 1 && all(@gain) ~~ Int, + :v(:$verbose)); + +my $max = 0; +my $current = 0; + +say ": Start at 0 (new max)" if $verbose; + +for @gain -> $change +{ + print ": $current + $change = { $current + $change }" if $verbose; + + $current += $change; + + if ($current > $max) + { + say " (new max)" if $verbose; + + $max = $current; + } + elsif $verbose + { + say ''; + } +} + +say $max; -- cgit