2021-12-04 11:02:56 +01:00
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
2021-12-11 17:59:17 +01:00
|
|
|
def loader_np():
|
2021-12-04 11:02:56 +01:00
|
|
|
with open('../.input/day04', 'r') as f:
|
|
|
|
data = f.read().splitlines()
|
|
|
|
|
|
|
|
vector = np.array([int(x) for x in data[0].split(",")])
|
|
|
|
tensor = np.array([
|
|
|
|
np.array(list(map(np.int32, map(str.split, board))))
|
|
|
|
for board
|
|
|
|
in [data[i:i+5] for i in range(2, len(data), 6)]
|
|
|
|
])
|
|
|
|
return vector, tensor
|
|
|
|
|
|
|
|
|
|
|
|
def solve1() -> int:
|
|
|
|
vector, tensor = loader_np()
|
|
|
|
for scale in range(1, len(vector)+1):
|
|
|
|
for matrix in tensor:
|
|
|
|
mask = np.isin(matrix, vector[:scale])
|
|
|
|
if mask.all(axis=0).any() or mask.all(axis=1).any():
|
2021-12-04 11:12:43 +01:00
|
|
|
return (matrix * ~mask).sum() * vector[scale-1]
|
2021-12-04 11:02:56 +01:00
|
|
|
|
|
|
|
|
2021-12-04 11:12:43 +01:00
|
|
|
def solve2() -> int:
|
|
|
|
vector, tensor = loader_np()
|
|
|
|
for scale in range(len(vector)+1, 0, -1):
|
|
|
|
for matrix in tensor:
|
|
|
|
mask = np.isin(matrix, vector[:scale])
|
|
|
|
if not mask.all(axis=0).any() and not mask.all(axis=1).any():
|
|
|
|
prev_mask = np.isin(matrix, vector[:scale+1])
|
|
|
|
return (matrix * ~prev_mask).sum() * vector[scale]
|
|
|
|
|
2021-12-04 11:02:56 +01:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
2021-12-04 11:12:43 +01:00
|
|
|
print(solve1()) # 67716
|
|
|
|
print(solve2()) # 1830
|