aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Davies <kaiepi@outlook.com>2021-10-04 20:00:22 -0300
committerBen Davies <kaiepi@outlook.com>2021-10-04 20:09:50 -0300
commit9d2de008f04860056bb23509a008880f80a031c3 (patch)
tree67eab4cc0374d4872c7a6b1a365e504968c93c44
parent753b5718d1347ac0342e0c4b0e28f7e00fb9fb06 (diff)
downloadperlweeklychallenge-club-9d2de008f04860056bb23509a008880f80a031c3.tar.gz
perlweeklychallenge-club-9d2de008f04860056bb23509a008880f80a031c3.tar.bz2
perlweeklychallenge-club-9d2de008f04860056bb23509a008880f80a031c3.zip
Optimize Ben Davies' challenge 133 task 2 solution
&prime-factors is eager to invoke Int.is-prime; cache an infinite sequence of primes so it gets called once per prime max.
-rw-r--r--challenge-133/ben-davies/raku/ch-2.raku3
1 files changed, 2 insertions, 1 deletions
diff --git a/challenge-133/ben-davies/raku/ch-2.raku b/challenge-133/ben-davies/raku/ch-2.raku
index ba862a20e4..831d18bda1 100644
--- a/challenge-133/ben-davies/raku/ch-2.raku
+++ b/challenge-133/ben-davies/raku/ch-2.raku
@@ -9,5 +9,6 @@ sub digits(Int:D $x, Int:D $base) {
$x.polymod($base xx $x.log: $base).reverse
}
sub prime-factors(Int:D $x is copy) {
- gather $x div= take (2..$x).grep(*.is-prime).first($x %% *) while $x > 1
+ state Int:D @primes = (2..*).grep(*.is-prime);
+ gather $x div= take @primes.first($x %% *) while $x > 1
}