Untitled
unknown
python
4 years ago
1.3 kB
14
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...