Catalan numbers: Difference between revisions
Content deleted Content added
Kotlin version enhanced |
Kotlin: strategy pattern |
||
Line 1,891: | Line 1,891: | ||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |
||
{{trans|Java}} |
|||
{{works with|Java|1.7.0}} |
{{works with|Java|1.7.0}} |
||
{{works with|Kotlin|1.0.0}} |
{{works with|Kotlin|1.0.0}} |
||
Line 1,897: | Line 1,896: | ||
<lang scala>import net.openhft.koloboke.collect.map.hash.HashIntDoubleMaps.* |
<lang scala>import net.openhft.koloboke.collect.map.hash.HashIntDoubleMaps.* |
||
abstract class Catalan { |
|||
fun |
abstract operator fun invoke(n: Int) : Double |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
} |
|||
⚫ | |||
object CatalanI : Catalan() { |
|||
⚫ | |||
override fun invoke(n: Int): Double { |
|||
if (n !in m) |
|||
⚫ | |||
return m[n] |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
} |
} |
||
Line 1,928: | Line 1,912: | ||
if (n in facts) |
if (n in facts) |
||
return facts[n] |
return facts[n] |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
facts[n] = f |
facts[n] = f |
||
return f |
return f |
||
Line 1,938: | Line 1,918: | ||
private val facts = newUpdatableMapOf(0 , 1.0, 1 , 1.0, 2 , 2.0) |
private val facts = newUpdatableMapOf(0 , 1.0, 1 , 1.0, 2 , 2.0) |
||
} |
|||
⚫ | |||
private val catsR1 = newUpdatableMapOf(0 , 1.0) |
|||
object CatalanR1 : Catalan() { |
|||
private val catsR2 = newUpdatableMapOf(0 , 1.0) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
} |
|||
object CatalanR2 : Catalan() { |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
} |
} |
||
fun main(args: Array<String>) { |
fun main(args: Array<String>) { |
||
val c = arrayOf(CatalanI, CatalanR1, CatalanR2) |
|||
for(i in 0..15) |
|||
⚫ | |||
println( "[%9d %9d %9d]".format(Catalan.catI(i).toLong(), Catalan.catR1(i).toLong(), Catalan.catR2(i).toLong())) |
|||
c.forEach { print("%9d".format(it(i).toLong())) } |
|||
println() |
|||
} |
|||
}</lang> |
}</lang> |
||
{{out}} |
{{out}} |
||
<pre> |
<pre> 1 1 1 |
||
1 1 1 |
|||
2 2 2 |
|||
5 5 5 |
|||
14 14 14 |
|||
42 42 42 |
|||
132 132 132 |
|||
429 429 429 |
|||
1430 1430 1430 |
|||
4862 4862 4862 |
|||
16796 16796 16796 |
|||
58786 58786 58786 |
|||
208012 208012 208012 |
|||
742900 742900 742900 |
|||
2674440 2674440 2674440 |
|||
9694845 9694845 9694845</pre> |
|||
=={{header|Liberty BASIC}}== |
=={{header|Liberty BASIC}}== |