aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2023-04-03 01:09:48 +0100
committerGitHub <noreply@github.com>2023-04-03 01:09:48 +0100
commit1b4ec79803cd2a2c533a9d0f9bf66ee2bc2e8357 (patch)
treec0efd20f0c6e4eb06248321e94f4d2deb255da8c
parentf461434b0862352cc863234eb49d28e5f1b72052 (diff)
parent15b116e7c45263f09467ed86f4a75a40a8591bc3 (diff)
downloadperlweeklychallenge-club-1b4ec79803cd2a2c533a9d0f9bf66ee2bc2e8357.tar.gz
perlweeklychallenge-club-1b4ec79803cd2a2c533a9d0f9bf66ee2bc2e8357.tar.bz2
perlweeklychallenge-club-1b4ec79803cd2a2c533a9d0f9bf66ee2bc2e8357.zip
Merge pull request #7838 from arnesom/branch-for-challenge-210
Arne Sommer
-rw-r--r--challenge-210/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-210/arne-sommer/raku/ch-1.raku28
-rwxr-xr-xchallenge-210/arne-sommer/raku/ch-2.raku44
-rwxr-xr-xchallenge-210/arne-sommer/raku/kill-and-win28
-rwxr-xr-xchallenge-210/arne-sommer/raku/number-collision44
5 files changed, 145 insertions, 0 deletions
diff --git a/challenge-210/arne-sommer/blog.txt b/challenge-210/arne-sommer/blog.txt
new file mode 100644
index 0000000000..228fdb6056
--- /dev/null
+++ b/challenge-210/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/killing-numbers.html
diff --git a/challenge-210/arne-sommer/raku/ch-1.raku b/challenge-210/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..30fc7b0acc
--- /dev/null
+++ b/challenge-210/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where @int.elems > 0 && @int.all ~~ UInt, :v($verbose));
+
+my $min = @int.min + 1;
+my $max = @int.max - 1;
+
+my $score = -Inf;
+my $target;
+
+for $min .. $max -> $value
+{
+ my $sum = @int.grep({ $value -1 <= $_ <= $value +1 }).sum;
+
+ if $sum > $score
+ {
+ $target = $value;
+ $score = $sum;
+ say ": + $value with sum $sum" if $verbose;
+ }
+ elsif $verbose
+ {
+ say ": - $value with sum $sum";
+ }
+
+}
+
+say $score;
diff --git a/challenge-210/arne-sommer/raku/ch-2.raku b/challenge-210/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..892dd445a2
--- /dev/null
+++ b/challenge-210/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,44 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@list where @list.elems > 0 && @list.all ~~ Int, :v($verbose));
+
+my $index = 0;
+
+loop
+{
+ last unless @list.elems;
+ last if $index == @list.end;
+
+ my $left = @list[$index];
+ my $right = @list[$index +1];
+
+ print ": { @list.join(",") } index $index " if $verbose;
+
+ if $left >= 0 && $right < 0
+ {
+ if $left > $right.abs
+ {
+ @list.splice($index+1,1);
+ say "> Remove $right at index {$index+1} -> { @list.join(",") }" if $verbose;
+ }
+ elsif $left < $right.abs
+ {
+ @list.splice($index,1);
+ say "< Remove $left at index $index -> { @list.join(",") }" if $verbose;
+ $index-- unless $index == 0;
+ }
+ else
+ {
+ @list.splice($index,2);
+ say " = Remove $left and $right at index $index and { $index +1 } -> { @list.join(",") }" if $verbose;
+ $index-- unless $index == 0;
+ }
+ }
+ else
+ {
+ say "" if $verbose;
+ $index++;
+ }
+}
+
+say "({ @list.join(",") })";
diff --git a/challenge-210/arne-sommer/raku/kill-and-win b/challenge-210/arne-sommer/raku/kill-and-win
new file mode 100755
index 0000000000..30fc7b0acc
--- /dev/null
+++ b/challenge-210/arne-sommer/raku/kill-and-win
@@ -0,0 +1,28 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where @int.elems > 0 && @int.all ~~ UInt, :v($verbose));
+
+my $min = @int.min + 1;
+my $max = @int.max - 1;
+
+my $score = -Inf;
+my $target;
+
+for $min .. $max -> $value
+{
+ my $sum = @int.grep({ $value -1 <= $_ <= $value +1 }).sum;
+
+ if $sum > $score
+ {
+ $target = $value;
+ $score = $sum;
+ say ": + $value with sum $sum" if $verbose;
+ }
+ elsif $verbose
+ {
+ say ": - $value with sum $sum";
+ }
+
+}
+
+say $score;
diff --git a/challenge-210/arne-sommer/raku/number-collision b/challenge-210/arne-sommer/raku/number-collision
new file mode 100755
index 0000000000..892dd445a2
--- /dev/null
+++ b/challenge-210/arne-sommer/raku/number-collision
@@ -0,0 +1,44 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@list where @list.elems > 0 && @list.all ~~ Int, :v($verbose));
+
+my $index = 0;
+
+loop
+{
+ last unless @list.elems;
+ last if $index == @list.end;
+
+ my $left = @list[$index];
+ my $right = @list[$index +1];
+
+ print ": { @list.join(",") } index $index " if $verbose;
+
+ if $left >= 0 && $right < 0
+ {
+ if $left > $right.abs
+ {
+ @list.splice($index+1,1);
+ say "> Remove $right at index {$index+1} -> { @list.join(",") }" if $verbose;
+ }
+ elsif $left < $right.abs
+ {
+ @list.splice($index,1);
+ say "< Remove $left at index $index -> { @list.join(",") }" if $verbose;
+ $index-- unless $index == 0;
+ }
+ else
+ {
+ @list.splice($index,2);
+ say " = Remove $left and $right at index $index and { $index +1 } -> { @list.join(",") }" if $verbose;
+ $index-- unless $index == 0;
+ }
+ }
+ else
+ {
+ say "" if $verbose;
+ $index++;
+ }
+}
+
+say "({ @list.join(",") })";