Пример #1
0
def ackCS(m, n):
    if (0 == m): return n + 1
    elif (0 == n): return CS(args=lambda: ackCS(m - 1, 1), memo=(m, n))
    else:
        return CS(fold=lambda a, b: CS(args=lambda: ackCS(a, b), memo=(a, b)),
                  args=[m - 1, lambda: ackCS(m, n - 1)],
                  memo=(m, n))
Пример #2
0
 def go(s, i):
     if (s == 0): return 1
     elif (s < 0 or i >= len(coins)): return 0
     else:
         return CS(fold=lambda x, y: x + y,
                   args=[lambda: go(s, i + 1), lambda: go(s - coins[i], i)],
                   memo=(s, i))
Пример #3
0
def fib(n): return n if (n < 2) else CS(fold = lambda x, y: x+y,
                                        args = [lambda: fib(n-1), lambda: fib(n-2)],
                                        memo = n)
# print("fib:    ", evalCS(fib(50)))

# even / odd

def isEven(n): return True if (n == 0) else CS(lambda: isOdd(n-1))
Пример #4
0
def isOdd(n): return False if (n == 0) else CS(lambda: isEven(n-1))

# print("isEven: ", evalCS(isEven(10000)))
# print("isOdd:  ", evalCS(isOdd(10000)))

######################################################################################
# coin change
######################################################################################

def ccN(s, coins):
Пример #5
0
def isOdd(n):
    return False if (n == 0) else CS(args=lambda: isEven(n - 1))
Пример #6
0
def fib(n):
    return n if (n < 2) else CS(fold=lambda x, y: x + y,
                                args=[lambda: fib(n - 1), lambda: fib(n - 2)],
                                memo=n)
Пример #7
0
def isEven(n): return True if (n == 0) else CS(lambda: isOdd(n-1))
def isOdd(n): return False if (n == 0) else CS(lambda: isEven(n-1))
Пример #8
0
 def isOdd(n): return False if (n == 0) else CS(args = lambda: isEven(n-1))
 self.assertTrue (evalCS(isEven(10000)))
Пример #9
0
 def foo(n, a): return a if (0 == n) else CS(args = lambda: foo(n-1, n+a))
 self.assertEqual(5050, evalCS(foo(100, 0)))
Пример #10
0
 def height(n, m):
   return 0 if (m <= 0 or n <= 0) else CS(fold = lambda x, y: x+y+1,
                                          args = [lambda: height(n, m-1), lambda: height(n-1, m-1)],
                                          memo = (n, m))
Пример #11
0
 def fib(n): return n if (n < 2) else CS(fold = lambda x, y: x+y,
                                         args = [lambda: fib(n-1), lambda: fib(n-2)],
                                         memo = n)
 self.assertEqual(55, evalCS(fib(10)))
Пример #12
0
 def bar(n): return 0 if (0 == n) else CS(fold = lambda v: n+v, args = lambda: bar(n-1))
 self.assertEqual(5050, evalCS(bar(100)))