Files
2024-12-14 16:22:20 +03:00

48 lines
1.2 KiB
Python

import re
pattern = re.compile(r'''
Button A: X\+(\d+), Y\+(\d+)
Button B: X\+(\d+), Y\+(\d+)
Prize: X=(\d+), Y=(\d+)
'''.strip(), re.MULTILINE)
data = open("input.txt").read().strip().split("\n\n")
data = [tuple(map(int, pattern.match(x).groups())) for x in data]
tok = lambda x: x[0]*3+x[1]
def f(data):
s = 0
for n, (xa, ya, xb, yb, xt, yt) in enumerate(data):
s1 = set()
for i in range(min(xt//xa+1, 101)):
for j in range(min(xt//xb+1, 101)):
if xa*i+xb*j==xt:
s1.add((i, j))
s2 = set()
for i in range(min(yt//ya+1, 101)):
for j in range(min(yt//yb+1, 101)):
if ya*i+yb*j==yt:
s2.add((i, j))
if s1&s2:
s += tok(min(s1&s2, key=tok))
return s
def f2(data):
s = 0
for i, (xa, ya, xb, yb, xt, yt) in enumerate(data):
xt += 10_000_000_000_000
yt += 10000000000000
d = xa*yb - xb*ya
da = xt*yb - xb*yt
db = xa*yt - xt*ya
if da%d==db%d==0:
a = da//d
b = db//d
s += a*3+b
return s
print(f(data))
print(f2(data))