with open("input/day10.txt") as f: size, input = 256, f.read().strip() lengths = [int(i) for i in input.split(",")] ring = list(range(size)) pos = 0 skip = 0 for length in lengths: assert length <= len(ring), "overlap undefined" tail = min(length, len(ring) - pos) head = max(length - tail, 0) a = pos + tail b = 0 + head prefix = ring[b:pos] inside = ring[pos:a] + ring[:b] suffix = ring[a:] assert length == len(inside) twisted = inside[::-1] ring = twisted[tail:] + prefix + twisted[:tail] + suffix pos = (pos + length + skip) % len(ring) skip += 1 print(ring[0] * ring[1])