aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark <53903062+andemark@users.noreply.github.com>2023-03-29 16:22:03 +0000
committerMark <53903062+andemark@users.noreply.github.com>2023-03-29 16:22:03 +0000
commit266fd253723f7ec6ef7c0932aa86e1733b919386 (patch)
tree222fa89e398431c0147e07b8baaff781b1817e11
parent3d7bbc4e0944e42647fb35792b61ea7e243c53ae (diff)
downloadperlweeklychallenge-club-266fd253723f7ec6ef7c0932aa86e1733b919386.tar.gz
perlweeklychallenge-club-266fd253723f7ec6ef7c0932aa86e1733b919386.tar.bz2
perlweeklychallenge-club-266fd253723f7ec6ef7c0932aa86e1733b919386.zip
Challenge 210 Solutions (Raku)
-rw-r--r--challenge-210/mark-anderson/raku/ch-1.raku17
1 files changed, 15 insertions, 2 deletions
diff --git a/challenge-210/mark-anderson/raku/ch-1.raku b/challenge-210/mark-anderson/raku/ch-1.raku
index 4b229c0fb2..0806b0c8dd 100644
--- a/challenge-210/mark-anderson/raku/ch-1.raku
+++ b/challenge-210/mark-anderson/raku/ch-1.raku
@@ -1,7 +1,9 @@
#!/usr/bin/env raku
use Test;
-say kill-and-win((1..100).roll(1_000_000)); # takes about 5 seconds
+say kill-and-win((1..100).hyper.roll(1_000_000)); # takes about 4.5 seconds
+
+say kill-and-win((1..100).hyper.roll(1_000_000).Bag); # takes about 1 second
is kill-and-win(2,3,1), 6; # choosing 2
is kill-and-win(1,1,2,2,2,3), 11; # choosing 2
@@ -12,7 +14,7 @@ is kill-and-win(8,6,3,3,8,1,9,3,1,4,5,2,5,4,5,4,7,3,3,5), 47; # choosing 4
is kill-and-win(2,6,1,1,6,5,6,3,4,9,8,3,3,2,3,2,3,3,7,9), 33; # choosing 7 or 8
is kill-and-win(6,4,5,4,1,3,2,9,2,4,7,1,1,9,8,2,2,2,4,4), 33; # choosing 3 or 8
-sub kill-and-win(*@ints)
+multi kill-and-win(*@ints)
{
@ints.Bag
.sort
@@ -24,6 +26,17 @@ sub kill-and-win(*@ints)
.max
}
+multi kill-and-win(Bag $b)
+{
+ $b.sort
+ .Array
+ .push($b.max.key.succ => 0)
+ .unshift($b.min.key.pred => 0)
+ .rotor(3 => -2)
+ .map(&total)
+ .max
+}
+
sub total(@a)
{
my @slice = .[0] == .[1]-1 == .[2]-2 ?? (0,1,2) !!