Last active
December 26, 2015 07:29
-
-
Save lesguillemets/7115621 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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