You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.3 KiB

import numpy as np
from collections import deque
file = "inputs/day10.input"
lines = [x.decode().replace("\n", "") for x in open(file, "rb").readlines()]
match = {"<": ">", "(": ")", "[": "]", "{": "}"}
opening = ["<", "(", "[", "{"]
points = {">": 4, ")": 1, "]": 2, "}": 3}
def check_corruption(line):
stack = deque("")
for letter in line:
if letter in opening:
stack.append(letter)
else:
last_opening = stack.pop()
if letter != match[last_opening]:
return letter
return "0"
def check_incomplete(line):
stack = deque("")
sequence = []
for letter in line:
if letter in opening:
stack.append(letter)
else:
last_opening = stack.pop()
while len(stack) != 0:
current_opening = stack.pop()
sequence.append(match[current_opening])
return sequence
scores = []
for line in lines:
score = 0
corruption_check = check_corruption(line)
if corruption_check != "0":
score += points[corruption_check]
else:
closing_seq = check_incomplete(line)
for letter in closing_seq:
score *= 5
score += points[letter]
scores.append(score)
scores = sorted(scores)
print(scores[len(scores) // 2])