-
Notifications
You must be signed in to change notification settings - Fork 0
/
d10p2.py
45 lines (36 loc) · 860 Bytes
/
d10p2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from statistics import median
POINTS = {
')': 1,
']': 2,
'}': 3,
'>': 4,
}
CLOSERS = {
')': '(',
']': '[',
'}': '{',
'>': '<',
}
OPENERS = {v: k for k, v in CLOSERS.items()}
def get_autocomplete_score(_input):
stack = []
for ch in _input:
if ch in CLOSERS:
if stack and stack[-1] == CLOSERS[ch]:
stack.pop()
else:
# corrupted
return None
else:
stack.append(ch)
score = 0
while stack:
score = 5 * score + POINTS[OPENERS[stack.pop()]]
return score
if __name__ == '__main__':
scores = []
with open('d10_input.txt', 'r') as f:
for row in f:
if (score := get_autocomplete_score(row.strip())) is not None:
scores.append(score)
print(median(scores))