diff options
Diffstat (limited to 'challenge-210')
| -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(",") })"; |
