29 lines
757 B
Python
29 lines
757 B
Python
def remove_bit(i, n):
|
|
return (i & ((1 << n) - 1)) | ((i & ~((1 << (n + 1)) - 1)) >> 1)
|
|
|
|
def main():
|
|
N = 65
|
|
mappings = {}
|
|
for i in range(0, N):
|
|
n = 0
|
|
g = remove_bit(i, n)
|
|
paths_set = set()
|
|
while g < i:
|
|
paths_set.add(g)
|
|
n += 1
|
|
g = remove_bit(i, n)
|
|
paths = sorted(list(paths_set))
|
|
mappings[i] = paths
|
|
|
|
visited_set = set()
|
|
stack = [paths[:]]
|
|
while len(stack) > 0:
|
|
for h in stack.pop():
|
|
if not h in visited_set:
|
|
visited_set.add(h)
|
|
stack.append(mappings[h])
|
|
visited = sorted(list(visited_set))
|
|
print(i, len(visited))
|
|
|
|
if __name__ == "__main__":
|
|
main() |