def generate_seed(levels):
if levels < 1:
raise ValueError("generate_seed() called with levels < 1")
if levels == 1:
return [1, 2]
prev_seed = generate_seed(levels - 1)
mid = len(prev_seed) // 2
cur_seed = []
sum_ = 1 + 2 ** levels
for i, val in enumerate(prev_seed):
cur_seed.extend([val, sum_ - val] if i < mid else [sum_ - val, val])
return cur_seed
for i in range(1, 5 + 1):
print(i, generate_seed(i))
1 [1, 2] 2 [1, 4, 3, 2] 3 [1, 8, 4, 5, 6, 3, 7, 2] 4 [1, 16, 8, 9, 4, 13, 5, 12, 11, 6, 14, 3, 10, 7, 15, 2] 5 [1, 32, 16, 17, 8, 25, 9, 24, 4, 29, 13, 20, 5, 28, 12, 21, 22, 11, 27, 6, 19, 14, 30, 3, 23, 10, 26, 7, 18, 15, 31, 2]