func max_prime_bases(ndig, maxbase=36) { var maxprimebases = [[]] var nwithbases = [0] var maxprime = (10**ndig - 1) for p in (idiv(maxprime + 1, 10) .. maxprime) { var dig = p.digits var bases = (2..maxbase -> grep {|b| dig.all { _ < b } && dig.digits2num(b).is_prime }) if (bases.len > maxprimebases.first.len) { maxprimebases = [bases] nwithbases = [p] } elsif (bases.len == maxprimebases.first.len) { maxprimebases << bases nwithbases << p } } var (alen, vlen) = (maxprimebases.first.len, maxprimebases.len) say("\nThe maximum number of prime valued bases for base 10 numeric strings of length ", ndig, " is #{alen}. The base 10 value list of ", vlen > 1 ? "these" : "this", " is:") maxprimebases.each_kv {|k,v| say(nwithbases[k], " => ", v) } } for n in (1..5) { max_prime_bases(n) }