Spaces:
Running
Running
import re | |
def parse_multiplications(text): | |
# Find all valid mul(X,Y) patterns where X and Y are 1-3 digit numbers | |
pattern = r'mul\((\d{1,3}),(\d{1,3})\)' | |
matches = re.finditer(pattern, text) | |
total = 0 | |
for match in matches: | |
x, y = int(match.group(1)), int(match.group(2)) | |
total += x * y | |
return total | |
def parse_with_conditionals(text): | |
# Find all instructions in order | |
mul_pattern = r'mul\((\d{1,3}),(\d{1,3})\)' | |
do_pattern = r'do\(\)' | |
dont_pattern = r'don\'t\(\)' | |
# Combine all patterns | |
all_patterns = f'({mul_pattern}|{do_pattern}|{dont_pattern})' | |
matches = re.finditer(all_patterns, text) | |
enabled = True | |
total = 0 | |
for match in matches: | |
full_match = match.group(0) | |
if full_match == 'do()': | |
enabled = True | |
elif full_match == "don't()": | |
enabled = False | |
else: | |
# It's a multiplication | |
if enabled: | |
x = int(match.group(2)) | |
y = int(match.group(3)) | |
total += x * y | |
return total | |
# Read input file | |
with open('./input.txt', 'r') as file: | |
content = file.read() | |
# Part 1 | |
result1 = parse_multiplications(content) | |
print(str(result1)) | |
# Part 2 | |
result2 = parse_with_conditionals(content) | |
print(str(result2)) |