Skip to content

Instantly share code, notes, and snippets.

@cjauvin
Last active December 11, 2016 16:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cjauvin/a43f5898c96d71d01c3b4fca09f2675c to your computer and use it in GitHub Desktop.
Save cjauvin/a43f5898c96d71d01c3b4fca09f2675c to your computer and use it in GitHub Desktop.
import sys
import re
def decompress(s):
d = []
while True:
m = re.search('(\((\d+)x(\d+)\)).*', s)
if m:
n_chars, mult = map(int, m.groups()[1:])
start, end = m.span(1)
d.append(s[:start])
r = s[end:][:n_chars] * mult
d.append(r)
s = s[(end + n_chars):]
else:
d.append(s)
break
return ''.join(d)
def decompress2(s):
def f(s):
n = 0
while s:
m = re.search('(\((\d+)x(\d+)\)).*', s)
if m:
n_chars, mult = map(int, m.groups()[1:])
start, end = m.span(1)
n += start + (f(s[end:][:n_chars]) * mult)
s = s[(end + n_chars):]
else:
n += len(s)
s = s[len(s):]
return n
return f(s)
assert len(decompress('ADVENT')) == 6
assert len(decompress('A(1x5)BC')) == 7
assert len(decompress('(3x3)XYZ')) == 9
assert len(decompress('A(2x2)BCD(2x2)EFG')) == 11
assert len(decompress('(6x1)(1x3)A')) == 6
assert len(decompress('X(8x2)(3x3)ABCY')) == 18
print(len(decompress(open('data/day9.txt').read().strip())))
assert decompress2('(25x3)(3x3)ABC(2x3)XY(5x2)PQRSTX(18x9)(3x2)TWO(5x7)SEVEN') == 445
assert decompress2('(3x3)XYZ') == len('XYZXYZXYZ')
assert decompress2('X(8x2)(3x3)ABCY') == len('XABCABCABCABCABCABCY')
assert decompress2('(27x12)(20x12)(13x14)(7x10)(1x12)A') == 241920
print(decompress2(open('data/day9.txt').read().strip()))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment