def step(a: str) -> str: b = "".join(["1" if c == "0" else "0" for c in reversed(a)]) return a + "0" + b def fill(a: str, n: int) -> str: while len(a) < n: a = step(a) return a[:n] def checksum(a: str) -> str: while len(a) % 2 == 0: xs = [] for i in range(0, len(a), 2): if a[i] == a[i + 1]: xs.append("1") else: xs.append("0") a = "".join(xs) return a def solve(): assert step("1") == "100" assert step("0") == "001" assert step("11111") == "11111000000" with open("i16.txt") as f: d = f.read().strip() a = fill(d, 272) b = checksum(a) print(b) a = fill(d, 35651584) b = checksum(a) print(b) if __name__ == "__main__": solve()