2021 day 6.
This commit is contained in:
parent
bd5727c758
commit
0756cf74c4
@ -13,12 +13,15 @@ boards = np.asarray(
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
# part 1
|
# (round, score) for each board (-1 when not found)
|
||||||
marked = np.zeros_like(boards, dtype=bool)
|
|
||||||
winning_rounds: list[tuple[int, int]] = [(-1, -1) for _ in range(len(boards))]
|
winning_rounds: list[tuple[int, int]] = [(-1, -1) for _ in range(len(boards))]
|
||||||
|
marked = np.zeros_like(boards, dtype=bool)
|
||||||
|
|
||||||
for round, number in enumerate(numbers):
|
for round, number in enumerate(numbers):
|
||||||
|
# mark boards
|
||||||
marked[boards == number] = True
|
marked[boards == number] = True
|
||||||
|
|
||||||
|
# check each board for winning
|
||||||
for index in range(len(boards)):
|
for index in range(len(boards)):
|
||||||
if winning_rounds[index][0] > 0:
|
if winning_rounds[index][0] > 0:
|
||||||
continue
|
continue
|
||||||
@ -29,9 +32,11 @@ for round, number in enumerate(numbers):
|
|||||||
number * int(np.sum(boards[index][~marked[index]])),
|
number * int(np.sum(boards[index][~marked[index]])),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# all boards are winning - break
|
||||||
if np.all(marked.all(axis=1) | marked.all(axis=2)):
|
if np.all(marked.all(axis=1) | marked.all(axis=2)):
|
||||||
break
|
break
|
||||||
|
|
||||||
|
# part 1
|
||||||
(_, score) = min(winning_rounds, key=lambda w: w[0])
|
(_, score) = min(winning_rounds, key=lambda w: w[0])
|
||||||
print(f"answer 1 is {score}")
|
print(f"answer 1 is {score}")
|
||||||
|
|
||||||
|
18
2021/day6.py
18
2021/day6.py
@ -1,13 +1,21 @@
|
|||||||
import sys
|
import sys
|
||||||
from collections import defaultdict
|
|
||||||
from dataclasses import dataclass
|
|
||||||
|
|
||||||
lines = sys.stdin.read().splitlines()
|
values = [int(c) for c in sys.stdin.read().strip().split(",")]
|
||||||
|
|
||||||
|
days = 256
|
||||||
|
lanterns = {day: 0 for day in range(days)}
|
||||||
|
for value in values:
|
||||||
|
for day in range(value, days, 7):
|
||||||
|
lanterns[day] += 1
|
||||||
|
|
||||||
|
for day in range(days):
|
||||||
|
for day2 in range(day + 9, days, 7):
|
||||||
|
lanterns[day2] += lanterns[day]
|
||||||
|
|
||||||
# part 1
|
# part 1
|
||||||
answer_1 = ...
|
answer_1 = sum(v for k, v in lanterns.items() if k < 80) + len(values)
|
||||||
print(f"answer 1 is {answer_1}")
|
print(f"answer 1 is {answer_1}")
|
||||||
|
|
||||||
# part 2
|
# part 2
|
||||||
answer_2 = ...
|
answer_2 = sum(lanterns.values()) + len(values)
|
||||||
print(f"answer 2 is {answer_2}")
|
print(f"answer 2 is {answer_2}")
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
2,3,1,3,4,4,1,5,2,3,1,1,4,5,5,3,5,5,4,1,2,1,1,1,1,1,1,4,1,1,1,4,1,3,1,4,1,1,4,1,3,4,5,1,1,5,3,4,3,4,1,5,1,3,1,1,1,3,5,3,2,3,1,5,2,2,1,1,4,1,1,2,2,2,2,3,2,1,2,5,4,1,1,1,5,5,3,1,3,2,2,2,5,1,5,2,4,1,1,3,3,5,2,3,1,2,1,5,1,4,3,5,2,1,5,3,4,4,5,3,1,2,4,3,4,1,3,1,1,2,5,4,3,5,3,2,1,4,1,4,4,2,3,1,1,2,1,1,3,3,3,1,1,2,2,1,1,1,5,1,5,1,4,5,1,5,2,4,3,1,1,3,2,2,1,4,3,1,1,1,3,3,3,4,5,2,3,3,1,3,1,4,1,1,1,2,5,1,4,1,2,4,5,4,1,5,1,5,5,1,5,5,2,5,5,1,4,5,1,1,3,2,5,5,5,4,3,2,5,4,1,1,2,4,4,1,1,1,3,2,1,1,2,1,2,2,3,4,5,4,1,4,5,1,1,5,5,1,4,1,4,4,1,5,3,1,4,3,5,3,1,3,1,4,2,4,5,1,4,1,2,4,1,2,5,1,1,5,1,1,3,1,1,2,3,4,2,4,3,1
|
@ -0,0 +1 @@
|
|||||||
|
3,4,3,1,2
|
Loading…
Reference in New Issue
Block a user