Hofstadter Figure-Figure sequences: Difference between revisions

Content added Content deleted
(rearranges in order of the language.)
(Kotlin version)
Line 1,122: Line 1,122:
</pre>
</pre>


=={{header|Mathematica}} ==
=={{header|Kotlin}} ==
Translated from Java.
<lang scala>package hofstadter


fun ffr(n: Int) = get(n, 0)[n - 1]

fun ffs(n: Int) = get(0, n)[n - 1]

internal fun get(rlistSize: Int, slistSize: Int): List<Int> {
val rlist = arrayListOf(1, 3, 7)
val slist = arrayListOf(2, 4, 5, 6)
val list = if (rlistSize > 0) rlist else slist
val targetSize = if (rlistSize > 0) rlistSize else slistSize

while (list.size() > targetSize)
list.remove(list.size() - 1)
while (list.size() < targetSize) {
val lastIndex = rlist.lastIndex
val lastr = rlist[lastIndex]
val r = lastr + slist[lastIndex]
rlist += r
var s = lastr + 1
while (s < r && list.size() < targetSize)
slist += s++
}
return list
}

fun main(args: Array<String>) {
print("R():")
1..10 forEach { print(" " + ffr(it)) }
println()

val first40R = 1..40 map { ffr(it) }
val first960S = 1..960 map { ffs(it) }
for (n in 1..1000)
if (n in first40R == n in first960S)
println("Integer $n either in both or neither set")
println("Done")
}</lang>

=={{header|Mathematica}} ==


1. Create two functions named ffr and ffs that when given n return R(n) or S(n) respectively.
1. Create two functions named ffr and ffs that when given n return R(n) or S(n) respectively.