RosettaCodeData/Task/Evaluate-binomial-coefficients/Python/evaluate-binomial-coefficie...

26 lines
617 B
Python

from typing import (Callable, List, Any)
from functools import reduce
from operator import mul
def binomialCoefficient(n: int) -> Callable[[int], int]:
return lambda k: product(enumFromTo(1 + k)(n)) // factorial(n - k)
def enumFromTo(m: int) -> Callable[[int], List[Any]]:
return lambda n: list(range(m, 1 + n))
def factorial(x: int) -> int:
return product(enumFromTo(1)(x))
def product(xs: List[Any]) -> int:
return reduce(mul, xs, 1)
if __name__ == '__main__':
print(binomialCoefficient(5)(3))
# k=0 to k=5, where n=5
print(list(map(binomialCoefficient(5), enumFromTo(0)(5))))