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)