# Trojkat Pascala
from binom import binom # Wyklad 4

# triangle = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1] ,...]

# uzywa nieefektywnego binom
def pascal1(n):
    return [[binom(i, k) for k in range(i+1)] for i in range(n+1)]

# lepszy, iteracyjny sposob; mozna dodatkowo zoptymalizowac
def pascal(n):
    triangle = [[1]]
    for i in range(n):
        prev_row = triangle[-1]
        next_row = [1]
        next_row.extend([prev_row[i] + prev_row[i + 1] for i in range(len(prev_row) - 1)])
        next_row.append(1)
        triangle.append(next_row)
    return triangle

# alternatywna implementacja binom, z uzyciem pascal()
def binom2(n, k):
    return pascal(n)[n][k]


if __name__ == "__main__":
    for row in pascal(10):
        print(row)

    print(binom2(4, 2))
