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.

47 lines
1.2 KiB

import numpy as np
numbers_file = "inputs/day4_1.input"
numbers = open(numbers_file, "rb").read().decode("utf-8").split(",")
numbers = [int(x) for x in numbers]
boards_file = "inputs/day4_2.input"
boards = open(boards_file, "rb").readlines()
boards = [x.decode().replace("\n", "") for x in boards]
boards = [x.split() for x in boards if len(x) > 0]
boards = np.array(boards, dtype=int).reshape(-1, 5, 5)
n_boards = boards.shape[0]
def is_solved(board):
if -5 in np.sum(board, axis=0):
return True
if -5 in np.sum(board, axis=1):
return True
else:
return False
def score_unmarked(board):
board = np.maximum(0, board)
return np.sum(board)
solved = False
solved_boards = 0
current_number = 0
solved_boards = []
last_board = 0
for number in numbers:
boards[boards == number] = -1
for i in range(boards.shape[0]):
if is_solved(boards[i]) and (i not in solved_boards):
solved_boards.append(i)
if len(solved_boards) == n_boards:
last_board = i
last_number = number
if len(solved_boards) == n_boards:
break
print(score_unmarked(boards[last_board]) * last_number)
# score = score_unmarked(current_board)