|
|
@@ -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] |