diff options
| author | Mark <53903062+andemark@users.noreply.github.com> | 2023-11-13 18:40:16 +0000 |
|---|---|---|
| committer | Mark <53903062+andemark@users.noreply.github.com> | 2023-11-13 18:40:16 +0000 |
| commit | 76b2999cd7b5c5aedb43cfce528fb1ec0e914213 (patch) | |
| tree | 502ec2ee60837687670e09f6d33103716278c5f9 | |
| parent | 7dd52fb63dcac5f223b444c76866e53d2a330891 (diff) | |
| download | perlweeklychallenge-club-76b2999cd7b5c5aedb43cfce528fb1ec0e914213.tar.gz perlweeklychallenge-club-76b2999cd7b5c5aedb43cfce528fb1ec0e914213.tar.bz2 perlweeklychallenge-club-76b2999cd7b5c5aedb43cfce528fb1ec0e914213.zip | |
ch-1.raku improved
| -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 +} |
