summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Kramkowski <tk@the-tk.com>2021-12-04 16:42:10 +0000
committerTomasz Kramkowski <tk@the-tk.com>2021-12-04 16:42:10 +0000
commit73189920ac73087350de99495877cb2a902ddff2 (patch)
treea137d8acb21f03098871acf01423c036a394d6f2
parentf57a4810e22d446970c19286f8ebae4c9afa24ba (diff)
downloadaoc2021-73189920ac73087350de99495877cb2a902ddff2.tar.gz
aoc2021-73189920ac73087350de99495877cb2a902ddff2.tar.xz
aoc2021-73189920ac73087350de99495877cb2a902ddff2.zip
day 4: small performance improvement
-rw-r--r--4.py13
1 files changed, 8 insertions, 5 deletions
diff --git a/4.py b/4.py
index ed2f13c..f2c3063 100644
--- a/4.py
+++ b/4.py
@@ -34,16 +34,19 @@ class Board:
return Board([[int(n) for n in l.split()] for l in s.split('\n')])
def solve(nums: list[int], boards: list[Board]) -> tuple[int, int]:
+ indices: set[int] = { i for i in range(len(boards)) }
wins: list[int] = []
num: int
for num in nums:
i: int
board: Board
- for i, board in enumerate(boards):
- if board.has_bingo: continue
- board.call(num)
- if board.has_bingo:
- wins.append(num * board.unmarked_sum)
+ winners: set[int] = set()
+ for i in indices:
+ boards[i].call(num)
+ if boards[i].has_bingo:
+ wins.append(num * boards[i].unmarked_sum)
+ winners.add(i)
+ indices.difference_update(winners)
return wins[0], wins[-1]
nums: str | list[int]