549f0c4382
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
from base import AoCBase
|
|
from typing import List
|
|
from re import findall
|
|
|
|
|
|
class Day3(AoCBase):
|
|
def __init__(self):
|
|
super().__init__(3) # Pass the day number to base class
|
|
|
|
def parse_input(self) -> List[str]:
|
|
"""Override with specific parsing for this day."""
|
|
return self.raw_data.strip()
|
|
|
|
def part1(self) -> int:
|
|
result = 0
|
|
regex = r"mul\((\d{1,3},\d{1,3})\)"
|
|
data = self.raw_data.split("/n")
|
|
for line in data:
|
|
matches = findall(regex, line)
|
|
for match in matches:
|
|
n = match.split(",")
|
|
result += int(n[0]) * int(n[1])
|
|
pass
|
|
|
|
|
|
return result
|
|
|
|
def part2(self) -> int:
|
|
result = 0
|
|
regex = r"(mul\((\d{1,3},\d{1,3})\))|(do(?!n't))|(don't)"
|
|
skip = False
|
|
matches = findall(regex, self.data)
|
|
for match in matches:
|
|
if match[2] != "":
|
|
skip = False
|
|
elif match[3] != "":
|
|
skip = True
|
|
if match[1] != "" and skip is False:
|
|
n = match[1].split(",")
|
|
result += int(n[0]) * int(n[1])
|
|
|
|
|
|
return result
|
|
|
|
|
|
if __name__ == "__main__":
|
|
solution = Day3()
|
|
solution.solve()
|