2015 day 17.
This commit is contained in:
		
							
								
								
									
										30
									
								
								src/holt59/aoc/2015/day17.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/holt59/aoc/2015/day17.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| import sys | ||||
| from typing import Iterator | ||||
|  | ||||
|  | ||||
| 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 | ||||
|  | ||||
|  | ||||
| containers = [int(c) for c in sys.stdin.read().split()] | ||||
| total = 25 if len(containers) <= 5 else 150 | ||||
|  | ||||
| combinations = [combination for combination in iter_combinations(total, containers)] | ||||
|  | ||||
| answer_1 = len(combinations) | ||||
| print(f"answer 1 is {answer_1}") | ||||
|  | ||||
| min_containers = min(len(combination) for combination in combinations) | ||||
|  | ||||
| answer_2 = sum(1 for combination in combinations if len(combination) == min_containers) | ||||
| print(f"answer 2 is {answer_2}") | ||||
		Reference in New Issue
	
	Block a user