35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
|
openers = ['(', '[', '{', '<']
|
||
|
closers = [')', ']', '}', '>']
|
||
|
points = [3, 57, 1197, 25137]
|
||
|
|
||
|
score = 0
|
||
|
with open('data', 'r') as fp:
|
||
|
# NOTE(dev): We assume all lines are the same length
|
||
|
for line in fp:
|
||
|
stack = []
|
||
|
for ch in line.strip():
|
||
|
line_score = 0
|
||
|
if(ch in openers):
|
||
|
stack.append(ch)
|
||
|
elif(len(stack) == 0):
|
||
|
try:
|
||
|
i = closers.index(ch)
|
||
|
line_score += points[closers.index(ch)]
|
||
|
except ValueError: # not a closer
|
||
|
pass
|
||
|
else:
|
||
|
try:
|
||
|
i = closers.index(ch)
|
||
|
last = stack[-1]
|
||
|
stack.pop()
|
||
|
if(last != openers[i]):
|
||
|
line_score += points[i]
|
||
|
score += line_score
|
||
|
print(last, '!=', openers[i])
|
||
|
break
|
||
|
except ValueError: # not an opener or closer!
|
||
|
pass
|
||
|
score += line_score
|
||
|
|
||
|
print(score)
|