Spaces:
Running
Running
| def parse_input(file): | |
| machines = [] | |
| with open(file, 'r') as f: | |
| lines = f.readlines() | |
| for i in range(0, len(lines), 3): | |
| a_x, a_y = map(int, lines[i].strip().split()[2::2]) | |
| b_x, b_y = map(int, lines[i+1].strip().split()[2::2]) | |
| p_x, p_y = map(int, lines[i+2].strip().split()[1::2]) | |
| machines.append(((a_x, a_y), (b_x, b_y), (p_x, p_y))) | |
| return machines | |
| def min_tokens_to_win(machines, prize_offset=0): | |
| min_tokens = float('inf') | |
| max_prizes = 0 | |
| for a_x, a_y, b_x, b_y, p_x, p_y in machines: | |
| p_x += prize_offset | |
| p_y += prize_offset | |
| found_solution = False | |
| for a in range(101): | |
| for b in range(101): | |
| if a * a_x + b * b_x == p_x and a * a_y + b * b_y == p_y: | |
| tokens = 3 * a + b | |
| if tokens < min_tokens: | |
| min_tokens = tokens | |
| found_solution = True | |
| if found_solution: | |
| max_prizes += 1 | |
| return max_prizes, min_tokens | |
| file = "input.txt" | |
| machines = parse_input(file) | |
| # Part 1 | |
| max_prizes, min_tokens = min_tokens_to_win(machines) | |
| print(min_tokens) | |
| # Part 2 | |
| max_prizes, min_tokens = min_tokens_to_win(machines, prize_offset=10000000000000) | |
| print(min_tokens) |