RosettaCodeData/Task/Bell-numbers/Kotlin/bell-numbers.kts
2024-10-16 18:07:41 -07:00

52 lines
1.1 KiB
Kotlin

class BellTriangle(n: Int) {
private val arr: Array<Int>
init {
val length = n * (n + 1) / 2
arr = Array(length) { 0 }
set(1, 0, 1)
for (i in 2..n) {
set(i, 0, get(i - 1, i - 2))
for (j in 1 until i) {
val value = get(i, j - 1) + get(i - 1, j - 1)
set(i, j, value)
}
}
}
private fun index(row: Int, col: Int): Int {
require(row > 0)
require(col >= 0)
require(col < row)
return row * (row - 1) / 2 + col
}
operator fun get(row: Int, col: Int): Int {
val i = index(row, col)
return arr[i]
}
private operator fun set(row: Int, col: Int, value: Int) {
val i = index(row, col)
arr[i] = value
}
}
fun main() {
val rows = 15
val bt = BellTriangle(rows)
println("First fifteen Bell numbers:")
for (i in 1..rows) {
println("%2d: %d".format(i, bt[i, 0]))
}
for (i in 1..10) {
print("${bt[i, 0]}")
for (j in 1 until i) {
print(", ${bt[i, j]}")
}
println()
}
}