From b2dfb7b808da55dc14547983620145cc3870e58c Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Thu, 30 Mar 2023 03:02:04 +0000 Subject: Challenge 210 Solutions (Raku) --- challenge-210/mark-anderson/raku/ch-1.raku | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/challenge-210/mark-anderson/raku/ch-1.raku b/challenge-210/mark-anderson/raku/ch-1.raku index 0806b0c8dd..91afd13e39 100644 --- a/challenge-210/mark-anderson/raku/ch-1.raku +++ b/challenge-210/mark-anderson/raku/ch-1.raku @@ -1,9 +1,9 @@ #!/usr/bin/env raku use Test; -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)); # takes about 4 seconds -say kill-and-win((1..100).hyper.roll(1_000_000).Bag); # takes about 1 second +say kill-and-win((1..100).hyper.roll(1_000_000).BagHash); # takes about 0.8 seconds is kill-and-win(2,3,1), 6; # choosing 2 is kill-and-win(1,1,2,2,2,3), 11; # choosing 2 @@ -16,27 +16,24 @@ 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 multi kill-and-win(*@ints) { - @ints.Bag - .sort - .Array - .push(@ints.max.succ => 0) - .unshift(@ints.min.pred => 0) - .rotor(3 => -2) - .map(&total) - .max + my $b = @ints.BagHash andthen .add((@ints.min-2, @ints.max+2)); + get-total($b) } -multi kill-and-win(Bag $b) +multi kill-and-win(BagHash $b) { - $b.sort - .Array - .push($b.max.key.succ => 0) - .unshift($b.min.key.pred => 0) + $b.add(($b.min.key-2, $b.max.key+2)); + get-total($b) +} + +sub get-total($b) +{ + $b.sort(*.key) .rotor(3 => -2) .map(&total) .max } - + sub total(@a) { my @slice = .[0] == .[1]-1 == .[2]-2 ?? (0,1,2) !! -- cgit