Anaprimes: Difference between revisions

Content added Content deleted
(Added C++ solution)
(→‎{{header|Wren}}: Better way of finding the anagrams - more than 3 times faster than before.)
Line 284: Line 284:
=={{header|Wren}}==
=={{header|Wren}}==
{{libheader|Wren-math}}
{{libheader|Wren-math}}
{{libheader|Wren-sort}}
{{libheader|Wren-fmt}}
{{libheader|Wren-fmt}}
Unsurprisingly, getting up to 1 billion is a struggle for the Wren interpreter - 8 minutes 50 seconds on my Core i7 machine.
Getting up to 1 billion takes around 2 minutes 25 seconds on my Core i7 machine. I've left it at that.
I gave up after that.
<syntaxhighlight lang="ecmascript">import "./math" for Int
<syntaxhighlight lang="ecmascript">import "./math" for Int
import "./sort" for Sort
import "./fmt" for Fmt
import "./fmt" for Fmt


Line 295: Line 292:
var maxIndex = 8
var maxIndex = 8
var primes = Int.primeSieve(limit)
var primes = Int.primeSieve(limit)
var digPrimes = primes.take(10).toList
var anaprimes = {}
var anaprimes = {}
for (p in primes) {
for (p in primes) {
var d = Sort.insertion(Int.digits(p)).join()
var digs = Int.digits(p)
var key = 1
if (anaprimes.containsKey(d)) {
for (dig in digs) key = key * digPrimes[dig]
anaprimes[d].add(p)
if (anaprimes.containsKey(key)) {
anaprimes[key].add(p)
} else {
} else {
anaprimes[d] = [p]
anaprimes[key] = [p]
}
}
}
}
Line 307: Line 307:
var groups = List.filled(maxIndex + 1, null)
var groups = List.filled(maxIndex + 1, null)
for (key in anaprimes.keys) {
for (key in anaprimes.keys) {
var nd = key.count
var v = anaprimes[key]
var v = anaprimes[key]
var nd = Int.digits(v[0]).count
var c = v.count
var c = v.count
if (c > largest[nd-1]) {
if (c > largest[nd-1]) {