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])