2021 day 6.

This commit is contained in:
Mikaël Capelle 2023-12-09 12:36:03 +01:00
parent bd5727c758
commit 0756cf74c4
4 changed files with 22 additions and 7 deletions

View File

@ -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}")

View File

@ -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}")

View File

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

View File

@ -0,0 +1 @@
3,4,3,1,2