Untitled
unknown
python
4 years ago
1.3 kB
20
Indexable
import numpy as np
#read in data
f = open('input_4.txt')
nums = np.array(next(f).strip().split(',')).astype(int)
next(f)
grids = []
grid = []
for line in f:
if len(grid) == 5:
grids.append(np.stack(grid))
grid = []
if len(line) == 1:
pass
else:
grid.append(np.array(line.strip().split()).astype(int))
grids = np.stack(grids)
#play bingo
bingo = np.ones_like(grids)
for n in nums:
bingo[grids==n] = 0
is_bingo_row = np.sum(bingo, axis=1) == 0
has_bingo_row = np.any(is_bingo_row,axis=1)
is_bingo_col = np.sum(bingo, axis=2) == 0
has_bingo_col = np.any(is_bingo_col,axis=1)
has_bingo = np.logical_or(has_bingo_row, has_bingo_col)
if np.any(has_bingo):
print((grids[has_bingo]*bingo[has_bingo]).sum() * n)
break
#part 2
bingo = np.ones_like(grids)
for n in nums:
bingo[grids==n] = 0
is_bingo_row = np.sum(bingo, axis=1) == 0
has_bingo_row = np.any(is_bingo_row,axis=1)
is_bingo_col = np.sum(bingo, axis=2) == 0
has_bingo_col = np.any(is_bingo_col,axis=1)
has_no_bingo = np.logical_not(np.logical_or(has_bingo_row, has_bingo_col))
if len(has_no_bingo) == 1:
print((grids*bingo).sum() * n)
break
grids = grids[has_no_bingo]
bingo = bingo[has_no_bingo]Editor is loading...