Skip to content

Commit 0eeba38

Browse files
Viliam PucikViliam Pucik
Viliam Pucik
authored and
Viliam Pucik
committed
2023-03
1 parent b8fdb90 commit 0eeba38

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

2023/03.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/usr/bin/env python
2+
import re
3+
from collections import defaultdict
4+
from math import prod
5+
6+
7+
def parse(lines):
8+
re_number = re.compile(r"\d+")
9+
re_symbol = re.compile(r"[^\d.]")
10+
11+
for y, line in enumerate(lines):
12+
for m in re_number.finditer(line):
13+
number, x0, x1 = int(m.group()), m.start() - 1, m.end() + 1
14+
for yy in range(max(y - 1, 0), min(y + 2, len(lines))):
15+
for m in re_symbol.finditer(lines[yy], x0, x1):
16+
yield number, m.group(), m.start(), yy
17+
18+
19+
s1, gears = 0, defaultdict(list)
20+
21+
for number, symbol, x, y in parse(open(0).read().splitlines()):
22+
s1 += number
23+
if symbol == "*":
24+
gears[x, y].append(number)
25+
26+
print(s1)
27+
print(sum(prod(numbers) for numbers in gears.values() if len(numbers) == 2))

0 commit comments

Comments
 (0)