Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
49
Task/Catalan-numbers/Python/catalan-numbers-1.py
Normal file
49
Task/Catalan-numbers/Python/catalan-numbers-1.py
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
from math import factorial
|
||||
import functools
|
||||
|
||||
|
||||
def memoize(func):
|
||||
cache = {}
|
||||
|
||||
def memoized(key):
|
||||
# Returned, new, memoized version of decorated function
|
||||
if key not in cache:
|
||||
cache[key] = func(key)
|
||||
return cache[key]
|
||||
return functools.update_wrapper(memoized, func)
|
||||
|
||||
|
||||
@memoize
|
||||
def fact(n):
|
||||
return factorial(n)
|
||||
|
||||
|
||||
def cat_direct(n):
|
||||
return fact(2 * n) // fact(n + 1) // fact(n)
|
||||
|
||||
|
||||
@memoize
|
||||
def catR1(n):
|
||||
return 1 if n == 0 else (
|
||||
sum(catR1(i) * catR1(n - 1 - i) for i in range(n))
|
||||
)
|
||||
|
||||
|
||||
@memoize
|
||||
def catR2(n):
|
||||
return 1 if n == 0 else (
|
||||
((4 * n - 2) * catR2(n - 1)) // (n + 1)
|
||||
)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
def pr(results):
|
||||
fmt = '%-10s %-10s %-10s'
|
||||
print((fmt % tuple(c.__name__ for c in defs)).upper())
|
||||
print(fmt % (('=' * 10,) * 3))
|
||||
for r in zip(*results):
|
||||
print(fmt % r)
|
||||
|
||||
defs = (cat_direct, catR1, catR2)
|
||||
results = [tuple(c(i) for i in range(15)) for c in defs]
|
||||
pr(results)
|
||||
47
Task/Catalan-numbers/Python/catalan-numbers-2.py
Normal file
47
Task/Catalan-numbers/Python/catalan-numbers-2.py
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
'''Catalan numbers'''
|
||||
|
||||
from itertools import accumulate, chain, count, islice
|
||||
|
||||
|
||||
# catalans3 :: [Int]
|
||||
def catalans3():
|
||||
'''Infinite sequence of Catalan numbers
|
||||
'''
|
||||
def go(c, n):
|
||||
return 2 * c * pred(2 * n) // succ(n)
|
||||
|
||||
return accumulate(
|
||||
chain([1], count(1)), go
|
||||
)
|
||||
|
||||
|
||||
# ------------------------- TEST -------------------------
|
||||
# main :: IO ()
|
||||
def main():
|
||||
'''Catalan numbers, definition 3'''
|
||||
print("Catalans 1-15:\n")
|
||||
print(
|
||||
'\n'.join([
|
||||
f'{n:>10}' for n
|
||||
in islice(catalans3(), 15)
|
||||
])
|
||||
)
|
||||
|
||||
|
||||
# ----------------------- GENERIC ------------------------
|
||||
|
||||
# pred :: Int -> Int
|
||||
def pred(n):
|
||||
'''Predecessor function'''
|
||||
return n - 1
|
||||
|
||||
|
||||
# succ :: Int -> Int
|
||||
def succ(n):
|
||||
'''Successor function'''
|
||||
return 1 + n
|
||||
|
||||
|
||||
# MAIN ---
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue