RosettaCodeData/Task/Evaluate-binomial-coefficients/Wren/evaluate-binomial-coefficients.wren
2023-12-16 21:33:55 -08:00

27 lines
713 B
Text

import "./fmt" for Fmt
import "./math" for Int
var binomial = Fn.new { |n, k|
if (n < 0 || k < 0) Fiber.abort("Arguments must be non-negative integers")
if (n < k) Fiber.abort("The second argument cannot be more than the first.")
if (n == k) return 1
var prod = 1
var i = n - k + 1
while (i <= n) {
prod = prod * i
i = i + 1
}
return prod / Int.factorial(k)
}
var limit = 14
System.write("n/k |")
for (k in 0..limit) System.write(Fmt.d(5, k))
System.print()
System.write("----+" + "-----" * (limit + 1))
System.print()
for (n in 0..limit) {
System.write("%(Fmt.d(3, n)) |")
for (k in 0..n) System.write(Fmt.d(5, binomial.call(n, k)))
System.print()
}