# Python! import re with open('09.txt') as file: data = file.read().rstrip('\n') marker_exp = re.compile('\((\d*)x(\d*)\)') level = 1 while marker_exp.search(data): print('Starting level', level, '. . .') decompressed = '' compressed = data while True: marker = marker_exp.search(compressed) mark_start = marker.span()[0] if mark_start: decompressed += compressed[:mark_start] length, reps = [int(x) for x in marker.groups()] sec_start = marker.span()[1] stop = sec_start + length decompressed += compressed[sec_start:stop] * reps remaining = compressed[stop:] if marker_exp.search(remaining): compressed = remaining else: decompressed += remaining break data = decompressed level += 1 print(len(data))