diff --git a/09-2.py b/09-2.py index c5dc64f..bf25146 100644 --- a/09-2.py +++ b/09-2.py @@ -1,28 +1,34 @@ # 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') - -def split_groups(sequence) - groups = [] - while sequence: - marker = marker_exp.match(sequence) - stop = marker.span()[1] + int(marker.groups()[0]) - groups.append(sequence[:stop]) - sequence = sequence[stop:] - return groups - - marker_exp = re.compile('\((\d*)x(\d*)\)') +char_exp = re.compile('[\(\)\dx]') -sections = split_groups(compressed) - -for section in sections: - subgroups = [] - while marker_exp.findall(subgroups) > 1: - subgroups = split_groups(section) - - +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)