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) |