advent/2016/09-1.py

36 lines
749 B
Python
Raw Permalink Normal View History

2017-01-14 00:34:25 +00:00
# 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))