aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark <53903062+andemark@users.noreply.github.com>2023-11-13 18:40:16 +0000
committerMark <53903062+andemark@users.noreply.github.com>2023-11-13 18:40:16 +0000
commit76b2999cd7b5c5aedb43cfce528fb1ec0e914213 (patch)
tree502ec2ee60837687670e09f6d33103716278c5f9
parent7dd52fb63dcac5f223b444c76866e53d2a330891 (diff)
downloadperlweeklychallenge-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.raku30
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
+}