My Advent of Code solutions in Python. kevinyap.ca/2019/12/going-fast-in-advent-of-code/
advent-of-code python
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Use recursion in decompression function

+15 -15
+15 -15
2016/day09.py
··· 5 5 6 6 7 7 def decompressed_len(data, improved=False): 8 + if not re.findall(marker_re, data): 9 + return len(data) 10 + 8 11 length = 0 9 12 10 - while re.findall(marker_re, data): 11 - take, repeat = (int(x) for x in re.findall(marker_re, data)[0]) 13 + take, repeat = (int(x) for x in re.findall(marker_re, data)[0]) 12 14 13 - # Remove any text before the first marker 14 - length += data.index('(') 15 - 16 - # Strip the marker 17 - end = data.index(')') 18 - data = data[end+1:] 15 + # Find start and end indices of first marker 16 + start = data.index('(') 17 + end = data.index(')') 19 18 20 - to_repeat = data[:take] 19 + length += start 21 20 22 - if '(' in to_repeat and improved: 23 - length += (decompressed_len(to_repeat, improved=True) * repeat) 24 - else: 25 - length += take * repeat 21 + data = data[end+1:] 22 + to_repeat = data[:take] 26 23 27 - data = data[take:] 24 + if '(' in to_repeat and improved: 25 + length += decompressed_len(to_repeat, improved) * repeat 26 + else: 27 + length += take * repeat 28 28 29 - return length + len(data) 29 + return length + decompressed_len(data[take:], improved) 30 30 31 31 32 32 payload = fileinput.input()[0].strip()