Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.32 KB | None | 0 0
  1. import sys
  2. sys.setrecursionlimit(1000000000)
  3.  
  4.  
  5. null = lambda n: lambda x: x
  6. inc = lambda a: lambda n: lambda x: n(a(n)(x))
  7. dec = lambda a: lambda n: lambda x: a(lambda u: lambda h: h(u(n)))(lambda u: x)(lambda x: x)
  8.  
  9. add = lambda a: lambda b: a(inc)(b)
  10. sub = lambda a: lambda b: b(dec)(a)
  11.  
  12. mul = lambda a: lambda b: a(add(b))(null)
  13.  
  14.  
  15. true = lambda a: lambda b: a
  16. false = lambda a: lambda b: b
  17. if_then_else = lambda cond: lambda x: lambda y: cond(x)(y)
  18.  
  19. logic_and = lambda a: lambda b: a(b)(false)
  20. logic_or = lambda a: lambda b: a(true)(b)
  21. logic_not = lambda a: a(false)(true)
  22.  
  23. iszero = lambda a: a(lambda x: false)(true)
  24. leq = lambda a: lambda b: iszero(sub(a)(b))
  25. eq = lambda a: lambda b: logic_and(leq(a)(b))(leq(b)(a))
  26.  
  27. rec = lambda u: u(u)
  28. fact = rec(lambda f: lambda n: if_then_else(iszero(n))(lambda _: inc(null))(lambda _: mul(n)(f(f)(dec(n))))(f))
  29. # do_while = rec(lambda f: lambda do: lambda cond_f: if_then_else(cond_f(do(do)))(lambda _: f(f)(do)(cond_f))(lambda _: _)(f))
  30.  
  31. minimum = lambda a: lambda b: if_then_else(leq(a)(b))(a)(b)
  32.  
  33. pair = lambda a: lambda b: lambda getter: getter(a)(b)
  34. first = lambda pr: pr(true)
  35. second = lambda pr: pr(false)
  36.  
  37. stack = pair(pair(null)(null))(null)
  38. top = lambda st: first(first(st))
  39. pop = lambda st: second(first(st))
  40. size = lambda st: second(st)
  41. push = lambda st: lambda a: pair(pair(a)(st))(inc(size(st)))
  42. isempty = lambda st: iszero(size(st))
  43. for_in_stack = rec(lambda f: lambda st: lambda callback: if_then_else(isempty(st))(lambda _: _)(lambda _: ((lambda _: f(f)(pop(st))(callback))(callback(top(st)))))(f))
  44. for_in_stack_forward = rec(lambda f: lambda st: lambda callback: if_then_else(isempty(st))(lambda _: _)(lambda _: ((lambda _: callback(top(st)))(f(f)(pop(st))(callback))))(f))
  45. get = lambda st: lambda i: top(sub(size(st))(inc(i))(pop)(st))
  46. set = rec(lambda f: lambda st: lambda i: lambda num: if_then_else(eq(size(st))(inc(i)))(lambda _: push(pop(st))(num))(lambda _: push(f(f)(pop(st))(i)(num))(top(st)))(f))
  47. swap = lambda st: lambda i: lambda j: set(set(st)(i)(get(st)(j)))(j)(get(st)(i))
  48.  
  49. # def get_const(n):
  50. #     if n == 0:
  51. #         return null
  52. #     return inc(get_const(n - 1))
  53. get_const = rec(lambda f: lambda n: null if n == 0 else inc(f(f)(n - 1)))
  54.  
  55. # def read_num():
  56. #     return get_const(int(input()))
  57. read_num = lambda: get_const(int(input()))
  58. # def to_int(a):
  59. #     return a(lambda x: x + 1)(0)
  60. to_int = lambda a: a(lambda x: x + 1)(0)
  61.  
  62. swap_if_greater = lambda st: lambda i: lambda j: if_then_else(leq(get(st)(j))(get(st)(i)))(lambda _: swap(st)(i)(j))(lambda _: st)(null)
  63. do_bubble = rec(lambda f: lambda st: lambda i: lambda n: if_then_else(eq(inc(i))(n))(lambda _: st)(lambda _: f(f)(swap_if_greater(st)(i)(inc(i)))(inc(i))(n))(f))
  64. sort_rec = rec(lambda f: lambda st: lambda i: lambda n: if_then_else(eq(i)(n))(lambda _: st)(lambda _: f(f)(do_bubble(st)(null)(n))(inc(i))(n))(f))
  65. sort = lambda st: sort_rec(st)(null)(size(st))
  66.  
  67.  
  68. read_stack = rec(lambda f: lambda st: lambda inp: if_then_else(iszero(inp))(lambda _: st)(lambda _: f(f)(push(st)(inp))(read_num()))(f))
  69. st = read_stack(stack)(read_num())
  70.  
  71. st = sort(st)
  72. for_in_stack_forward(st)(lambda n: print(to_int(n), end=" "))
  73.  
  74. # print(to_int(fact(read_num())))
  75. # print(to_int(fact)(read_num()))
  76. # print(to_int(add(read_num())(read_num())))
  77. # print(to_int(minimum(read_num())(read_num())))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement