Summarize and say sequence: Difference between revisions
Content added Content deleted
(→{{header|REXX}}: used the exact high limit, added/changed comments and whitespace, changed output, optimized generator loop.) |
(→{{header|Kotlin}}: Replaced existing code with faster version) |
||
Line 2,432: | Line 2,432: | ||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |
||
<lang scala>// version 1.1.2 |
<lang scala>// version 1.1.2 |
||
const val LIMIT = 1_000_000 |
|||
val sb = StringBuilder() |
val sb = StringBuilder() |
||
Line 2,443: | Line 2,445: | ||
} |
} |
||
return sb.toString() |
return sb.toString() |
||
} |
|||
fun permute(input: List<Char>): List<List<Char>> { |
|||
if (input.size == 1) return listOf(input) |
|||
⚫ | |||
val toInsert = input[0] |
|||
for (perm in permute(input.drop(1))) { |
|||
for (i in 0..perm.size) { |
|||
val newPerm = perm.toMutableList() |
|||
newPerm.add(i, toInsert) |
|||
perms.add(newPerm) |
|||
} |
|||
} |
|||
return perms |
|||
} |
} |
||
fun main(args: Array<String>) { |
fun main(args: Array<String>) { |
||
val sieve = IntArray(LIMIT) // all zero by default |
|||
var maxIterations = 0 |
|||
⚫ | |||
val elements = mutableListOf<String>() |
val elements = mutableListOf<String>() |
||
for (n in 1 until |
for (n in 1 until LIMIT) { |
||
if (sieve[n] > 0) continue |
|||
elements.clear() |
|||
var next = n.toString() |
var next = n.toString() |
||
elements.add(next) |
elements.add(next) |
||
Line 2,456: | Line 2,472: | ||
next = selfRefSeq(next) |
next = selfRefSeq(next) |
||
if (next in elements) { |
if (next in elements) { |
||
val |
val size = elements.size |
||
sieve[n] = size |
|||
if (n > 9) { |
|||
val perms = permute(n.toString().toList()) |
|||
for (perm in perms) { |
|||
if (perm[0] == '0') continue |
|||
val k = perm.joinToString("").toInt() |
|||
sieve[k] = size |
|||
} |
} |
||
} |
|||
break |
break |
||
} |
} |
||
Line 2,470: | Line 2,487: | ||
} |
} |
||
} |
} |
||
val maxIterations = sieve.max()!! |
|||
for (n in 1 until LIMIT) { |
|||
if (sieve[n] < maxIterations) continue |
|||
println("$n -> Iterations = $maxIterations") |
println("$n -> Iterations = $maxIterations") |
||
var next = n.toString() |
var next = n.toString() |