Jump to content

Multi-base primes: Difference between revisions

→‎{{header|Wren}}: Much improved - more than 10 times quicker than before.
m (Minor edit to Rust code)
(→‎{{header|Wren}}: Much improved - more than 10 times quicker than before.)
Line 270:
{{libheader|Wren-math}}
{{libheader|Wren-fmt}}
NotThis very quick -takes about 494.4 seconds to process up to 4 character strings and 170 seconds for the extra credit which is not too bad for the Wren interpreter.
<lang ecmascript>import "/math" for Int, Nums
import "/fmt" for Conv
 
var maxDepth = 5
var c = Int.primeSieve(36.pow(4maxDepth), false)
var digits = Conv.digits // all digits up to base 36
var maxStrings = []
var mostBases = -1
 
var minBaseprocess = Fn.new { |sindices|
var min = 2
for (e in s) {
var b = digits.indexOf(e) + 1
if (b > min) min = b
}
return min
}
 
var process = Fn.new { |s|
var bases = []
forvar (bminBase in= minBase2.callmax(s)Nums..36max(indices) {+ 1)
for (b in var i = ConvminBase.atoi(s,.36) b){
ifvar (!c[i])n bases.add(b)= 0
for (d3i in digitsindices) {n = n * b + i
if (b > min!c[n]) min = bases.add(b)
}
var count = bases.count
if (count > mostBases) {
mostBases = count
maxStrings = [[sindices.toList, bases]]
} else if (count == mostBases) {
maxStrings.add([sindices.toList, bases])
}
}
Line 305 ⟶ 299:
var printResults = Fn.new {
System.print("%(maxStrings[0][1].count)")
for (sm in maxStrings) {
System.print("%(var s = m[0].reduce("") ->{ %(s|acc, i| acc + digits[1i])") }
System.print("%(s) -> %(m[1])")
}
}
 
var nestedFor // recursive
System.write("1 character strings which are prime in most bases: ")
nestedFor = Fn.new { |indices, length, level|
for (s in digits) process.call(s)
if (level == indices.count) {
printResults.call()
for (s in digits) process.call(sindices)
 
} else {
System.write("\n2 character strings which are prime in most bases: ")
indices[level] = (level == 0) ? 1 : 0
maxStrings = []
while (indices[level] < length) {
mostBases = -1
nestedFor.call(indices, length, level + 1)
for (d1 in digits.skip(1)) {
indices[level] = indices[level] + 1
for (d2 in digits) {
var s = d1 + d2
process.call(s)
}
}
printResults.call()
 
System.write("\n3 character strings which are prime in most bases: ")
maxStrings = []
mostBases = -1
for (d1 in digits.skip(1)) {
for (d2 in digits) {
for (d3 in digits) {
var s = d1 + d2 + d3
process.call(s)
}
}
}
printResults.call()
 
for (depth in 1..maxDepth) {
System.write("\n4 character strings which are prime in most bases: ")
System.write("1%(depth) character strings which are prime in most bases: ")
maxStrings = []
maxStrings = []
mostBases = -1
mostBases = -1
for (d1 in digits.skip(1)) {
var indices = List.filled(depth, 0)
for (d2 in digits) {
nestedFor.call(indices, digits.count, 0)
for (d3 in digits) {
printResults.call()
for (d4 in digits) {
System.print()
var s = d1 + d2 + d3 + d4
}</lang>
process.call(s)
}
}
}
}
printResults.call()</lang>
 
{{out}}
Line 369 ⟶ 344:
1727 -> [8, 9, 11, 12, 13, 15, 16, 17, 19, 20, 22, 23, 24, 26, 27, 29, 31, 33, 36]
5347 -> [8, 9, 10, 11, 12, 13, 16, 18, 19, 22, 24, 25, 26, 30, 31, 32, 33, 34, 36]
 
System.write("\n25 character strings which are prime in most bases: ")18
30271 -> [8, 10, 12, 13, 16, 17, 18, 20, 21, 23, 24, 25, 31, 32, 33, 34, 35, 36]
</pre>
9,492

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.