37 lines
967 B
Python
37 lines
967 B
Python
|
|
from collections import defaultdict
|
||
|
|
from itertools import combinations
|
||
|
|
|
||
|
|
from solutions import BaseSolution
|
||
|
|
|
||
|
|
|
||
|
|
class Solution(BaseSolution):
|
||
|
|
input_file = "17.txt"
|
||
|
|
|
||
|
|
def __str__(self):
|
||
|
|
return "Day 17: No Such Thing as Too Much"
|
||
|
|
|
||
|
|
def parse_input(self, data):
|
||
|
|
return data.strip()
|
||
|
|
|
||
|
|
def solve(self, puzzle_input, g=150):
|
||
|
|
return self._solve(puzzle_input, g)[0]
|
||
|
|
|
||
|
|
def solve_again(self, puzzle_input, g=150):
|
||
|
|
return self._solve(puzzle_input, g)[1]
|
||
|
|
|
||
|
|
def _solve(self, puzzle_input, g=150):
|
||
|
|
buckets = sorted(list(map(int, puzzle_input.split())), reverse=True)
|
||
|
|
t = 0
|
||
|
|
r = defaultdict(int)
|
||
|
|
for i in range(len(buckets)):
|
||
|
|
for c in combinations(buckets, i):
|
||
|
|
if sum(c) == g:
|
||
|
|
t += 1
|
||
|
|
r[i] += 1
|
||
|
|
return t, min(r.items(), key=lambda kv: kv[0])[1]
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
solution = Solution()
|
||
|
|
solution.show_results()
|