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 perms = mutableListOf<List<Char>>()
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 maxSeeds = mutableListOf<Int>()
val elements = mutableListOf<String>()
val elements = mutableListOf<String>()
for (n in 1 until 1_000_000) {
for (n in 1 until LIMIT) {
elements.clear()
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 count = elements.size
val size = elements.size
if (count > maxIterations) {
sieve[n] = size
maxIterations = count
if (n > 9) {
maxSeeds.clear()
val perms = permute(n.toString().toList())
maxSeeds.add(n)
for (perm in perms) {
}
if (perm[0] == '0') continue
else if (count == maxIterations) {
val k = perm.joinToString("").toInt()
maxSeeds.add(n)
sieve[k] = size
}
}
}
break
break
}
}
Line 2,470: Line 2,487:
}
}
}
}
for (n in maxSeeds) {
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()