probabilities/shifts.py
2023-01-01 18:45:51 -05:00

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()