advent-of-code/src/holt59/aoc/2015/day17.py
Mikaël Capelle 1289aed19c
Some checks failed
continuous-integration/drone/pr Build is failing
continuous-integration/drone/push Build is failing
Start fixing 2015 for new API.
2024-12-08 11:57:35 +01:00

35 lines
947 B
Python

from typing import Any, Iterator
from ..base import BaseSolver
def iter_combinations(value: int, containers: list[int]) -> Iterator[tuple[int, ...]]:
if value < 0:
return
if value == 0:
yield ()
for i in range(len(containers)):
for combination in iter_combinations(
value - containers[i], containers[i + 1 :]
):
yield (containers[i],) + combination
class Solver(BaseSolver):
def solve(self, input: str) -> Iterator[Any]:
containers = [int(c) for c in input.split()]
total = 25 if len(containers) <= 5 else 150
combinations = [
combination for combination in iter_combinations(total, containers)
]
yield len(combinations)
min_containers = min(len(combination) for combination in combinations)
yield sum(
1 for combination in combinations if len(combination) == min_containers
)