diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-04-03 01:09:48 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-03 01:09:48 +0100 |
| commit | 1b4ec79803cd2a2c533a9d0f9bf66ee2bc2e8357 (patch) | |
| tree | c0efd20f0c6e4eb06248321e94f4d2deb255da8c | |
| parent | f461434b0862352cc863234eb49d28e5f1b72052 (diff) | |
| parent | 15b116e7c45263f09467ed86f4a75a40a8591bc3 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-210/arne-sommer/raku/ch-1.raku | 28 | ||||
| -rwxr-xr-x | challenge-210/arne-sommer/raku/ch-2.raku | 44 | ||||
| -rwxr-xr-x | challenge-210/arne-sommer/raku/kill-and-win | 28 | ||||
| -rwxr-xr-x | challenge-210/arne-sommer/raku/number-collision | 44 |
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(",") })"; |
