Anonymous user
Catalan numbers: Difference between revisions
Kotlin: strategy pattern
(Kotlin version enhanced) |
(Kotlin: strategy pattern) |
||
Line 1,891:
=={{header|Kotlin}}==
{{works with|Java|1.7.0}}
{{works with|Kotlin|1.0.0}}
Line 1,897 ⟶ 1,896:
<lang scala>import net.openhft.koloboke.collect.map.hash.HashIntDoubleMaps.*
abstract operator fun
if (n !in catsI)▼
catsI[n] = Math.round(fact(2 * n) / (fact(n + 1) * fact(n))).toDouble()▼
return catsI[n]▼
}
}▼
object CatalanI : Catalan() {
fun catR1(n: Int): Double {▼
override fun
if (n !in
for (i in 0..n - 1)▼
sum += catR1(i) * catR1(n - 1 - i)▼
sum = Math.round(sum).toDouble()▼
catsR1[n] = sum▼
return sum▼
}▼
fun catR2(n: Int): Double {▼
if (n !in catsR2)▼
catsR2[n] = Math.round(2.0 * (2 * (n - 1) + 1) / (n + 1) * catR2(n - 1)).toDouble()▼
return catsR2[n]▼
}
Line 1,928 ⟶ 1,912:
if (n in facts)
return facts[n]
▲ var f = 2.0
for (i in 3..n)▼
f *= i▼
facts[n] = f
return f
Line 1,938 ⟶ 1,918:
private val facts = newUpdatableMapOf(0 , 1.0, 1 , 1.0, 2 , 2.0)
}
▲ private val catsI = newUpdatableMapOf(0 , 1.0)
object CatalanR1 : Catalan() {
▲ for (i in 0..n - 1)
▲ sum = Math.round(sum).toDouble()
▲ return sum
▲ }
}
object CatalanR2 : Catalan() {
▲ }
}
fun main(args: Array<String>) {
val c = arrayOf(CatalanI, CatalanR1, CatalanR2)
c.forEach { print("%9d".format(it(i).toLong())) }
println()
}
}</lang>
{{out}}
<pre>
=={{header|Liberty BASIC}}==
|