# Python! import re class compression_group: def __init__(self, match_object): self.length, self.reps = [int(x) for x in match_object.groups()] self.marker_start, self.body_start = match_object.span() self.end = self.body_start + self.length with open('09.txt') as file: compressed = file.read().rstrip('\n') marker_exp = re.compile('\((\d*)x(\d*)\)') char_exp = re.compile('[\(\)\dx]') markers = marker_exp.finditer(compressed) groups = [compression_group(m) for m in markers] characters = 0 index = 0 for i, c in enumerate(compressed): if not char_exp.match(c): current_groups = [] multiplier = 1 for group in groups: if group.body_start <= i < group.end: multiplier *= group.reps current_groups.append(group) elif current_groups and i > current_groups[0].end: break characters += multiplier print(characters)