Skip to content

Instantly share code, notes, and snippets.

@lesguillemets
Last active December 26, 2015 07:29
Show Gist options
  • Save lesguillemets/7115621 to your computer and use it in GitHub Desktop.
Save lesguillemets/7115621 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# coding:utf-8
# from : http://urasunday.com/u-2_09/comic/002_001.html
class B(object):
def __init__(self, m, n, f=lambda n: n+1):
self.m = m
self.n = n
self.f = f
self.value = None
def calc(self):
if isinstance(self.n, B):
self.n.calc()
if self.n.value is not None:
self.n = self.n.value
elif isinstance(self.m, B):
self.m.calc()
if self.m.value is not None:
self.m = self.m.value
else:
if self.m == 0:
self.value = self.f(self.n)
elif self.n == 0:
self.m -= 1
self.n = 1
else:
self.m -= 1
self.n = B(self.m+1, self.n-1)
def __str__(self):
return 'B(' + str(self.m) + ', ' + str(self.n) + ')'
b = B(3,3)
for i in xrange(100):
print b
b.calc()
print b
'''
最後まで計算するなら(2k+ lines)上を
while True:
print b
b.calc()
if b.value is not None:
print b.value
break
'''
'''
B(3, 3)
B(2, B(3, 2))
B(2, B(2, B(3, 1)))
B(2, B(2, B(2, B(3, 0))))
B(2, B(2, B(2, B(2, 1))))
B(2, B(2, B(2, B(1, B(2, 0)))))
B(2, B(2, B(2, B(1, B(1, 1)))))
B(2, B(2, B(2, B(1, B(0, B(1, 0))))))
B(2, B(2, B(2, B(1, B(0, B(0, 1))))))
B(2, B(2, B(2, B(1, B(0, 2)))))
B(2, B(2, B(2, B(1, 3))))
B(2, B(2, B(2, B(0, B(1, 2)))))
B(2, B(2, B(2, B(0, B(0, B(1, 1))))))
B(2, B(2, B(2, B(0, B(0, B(0, B(1, 0)))))))
B(2, B(2, B(2, B(0, B(0, B(0, B(0, 1)))))))
B(2, B(2, B(2, B(0, B(0, B(0, 2))))))
B(2, B(2, B(2, B(0, B(0, 3)))))
B(2, B(2, B(2, B(0, 4))))
B(2, B(2, B(2, 5)))
B(2, B(2, B(1, B(2, 4))))
B(2, B(2, B(1, B(1, B(2, 3)))))
B(2, B(2, B(1, B(1, B(1, B(2, 2))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(2, 1)))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(1, B(2, 0))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(1, B(1, 1))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(1, B(0, B(1, 0)))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(1, B(0, B(0, 1)))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(1, B(0, 2))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(1, 3)))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(0, B(1, 2))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(0, B(0, B(1, 1)))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(0, B(0, B(0, B(1, 0))))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(0, B(0, B(0, B(0, 1))))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(0, B(0, B(0, 2)))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(0, B(0, 3))))))))
B(2, B(2, B(1, B(1, B(1, B(1, B(0, 4)))))))
B(2, B(2, B(1, B(1, B(1, B(1, 5))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(1, 4)))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(0, B(1, 3))))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(0, B(0, B(1, 2)))))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(0, B(0, B(0, B(1, 1))))))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(0, B(0, B(0, B(0, B(1, 0)))))))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(0, B(0, B(0, B(0, B(0, 1)))))))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(0, B(0, B(0, B(0, 2))))))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(0, B(0, B(0, 3)))))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(0, B(0, 4))))))))
B(2, B(2, B(1, B(1, B(1, B(0, B(0, 5)))))))
B(2, B(2, B(1, B(1, B(1, B(0, 6))))))
B(2, B(2, B(1, B(1, B(1, 7)))))
B(2, B(2, B(1, B(1, B(0, B(1, 6))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(1, 5)))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(1, 4))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(0, B(1, 3)))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(0, B(0, B(1, 2))))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 1)))))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 0))))))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 1))))))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 2)))))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(0, B(0, B(0, 3))))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(0, B(0, 4)))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, B(0, 5))))))))
B(2, B(2, B(1, B(1, B(0, B(0, B(0, 6)))))))
B(2, B(2, B(1, B(1, B(0, B(0, 7))))))
B(2, B(2, B(1, B(1, B(0, 8)))))
B(2, B(2, B(1, B(1, 9))))
B(2, B(2, B(1, B(0, B(1, 8)))))
B(2, B(2, B(1, B(0, B(0, B(1, 7))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(1, 6)))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(1, 5))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(1, 4)))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 3))))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 2)))))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 1))))))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 0)))))))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 1)))))))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 2))))))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 3)))))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 4))))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, B(0, 5)))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, B(0, 6))))))))
B(2, B(2, B(1, B(0, B(0, B(0, B(0, 7)))))))
B(2, B(2, B(1, B(0, B(0, B(0, 8))))))
B(2, B(2, B(1, B(0, B(0, 9)))))
B(2, B(2, B(1, B(0, 10))))
B(2, B(2, B(1, 11)))
B(2, B(2, B(0, B(1, 10))))
B(2, B(2, B(0, B(0, B(1, 9)))))
B(2, B(2, B(0, B(0, B(0, B(1, 8))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(1, 7)))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(1, 6))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 5)))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 4))))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 3)))))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 2))))))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 1)))))))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(1, 0))))))))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 1))))))))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 2)))))))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 3))))))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 4)))))))))))
B(2, B(2, B(0, B(0, B(0, B(0, B(0, B(0, B(0, B(0, 5))))))))))
......
'''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment