diff options
| -rw-r--r-- | challenge-243/mark-anderson/raku/ch-1.raku | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/challenge-243/mark-anderson/raku/ch-1.raku b/challenge-243/mark-anderson/raku/ch-1.raku index c5e9532de3..06314407da 100644 --- a/challenge-243/mark-anderson/raku/ch-1.raku +++ b/challenge-243/mark-anderson/raku/ch-1.raku @@ -1,13 +1,39 @@ #!/usr/bin/env raku use Test; +use Benchy; is reverse-pairs(1,3,2,3,1), 2; is reverse-pairs(2,4,3,5,1), 3; -# I've tried memoize, race, and promises for big lists and those seem -# to make things slower 🤔 +benchmark(); sub reverse-pairs(*@a) { + my $bag = @a.BagHash; + + sum gather for @a -> $n + { + $bag{$n}--; + + for $bag.keys -> $k + { + take $bag{$k} if $n > $k + $k + } + } +} + +sub reverse-pairs-slow(*@a) +{ + grep { .[0] > .[1] * 2 }, @a.combinations(2) } + +sub benchmark +{ + my @a = (1..9).roll(2500); + + b 5, { reverse-pairs-slow(@a) }, { reverse-pairs(@a) } + + # Old: 54.254473421s + # New: 1.151968905s + # NEW version is 47.10x faster +} |
