| @@ -0,0 +1,20 @@ | |||
| A, *B = text.split('\n\n') | |||
| calls = [int(n) for n in A.split(',')] | |||
| boards = [[[int(n) for n in ln.split()] for ln in b.splitlines()] for b in B] | |||
| win_scores = [] | |||
| for n in calls: | |||
| pending = [] | |||
| for board in boards: | |||
| board[:] = [[None if m == n else m for m in row] for row in board] | |||
| win_rows = any(all(n is None for n in row) for row in board) | |||
| win_cols = any(all(n is None for n in col) for col in zip(*board)) | |||
| if win_cols or win_rows: | |||
| total = sum(sum(n for n in row if n is not None) for row in board) | |||
| win_scores.append(total * n) | |||
| else: | |||
| pending.append(board) | |||
| boards = pending | |||
| ans1 = win_scores[0] | |||
| ans2 = win_scores[-1] | |||