From 37f1ac7c030d6a7e24f9df0dbd80254d075cf14c Mon Sep 17 00:00:00 2001 From: Fedor Lyanguzov Date: Sat, 14 Dec 2024 16:22:20 +0300 Subject: [PATCH] 13.2 python cramers rule --- 13/13.py | 62 ++++++++------------------------------------------------ 1 file changed, 9 insertions(+), 53 deletions(-) diff --git a/13/13.py b/13/13.py index 60a4929..c9f84d2 100644 --- a/13/13.py +++ b/13/13.py @@ -8,23 +8,6 @@ Prize: X=(\d+), Y=(\d+) data = open("input.txt").read().strip().split("\n\n") -data = ''' -Button A: X+94, Y+34 -Button B: X+22, Y+67 -Prize: X=8400, Y=5400 - -Button A: X+26, Y+66 -Button B: X+67, Y+21 -Prize: X=12748, Y=12176 - -Button A: X+17, Y+86 -Button B: X+84, Y+37 -Prize: X=7870, Y=6450 - -Button A: X+69, Y+23 -Button B: X+27, Y+71 -Prize: X=18641, Y=10279 -'''.strip().split("\n\n") data = [tuple(map(int, pattern.match(x).groups())) for x in data] @@ -43,7 +26,6 @@ def f(data): if ya*i+yb*j==yt: s2.add((i, j)) if s1&s2: - print("@0", n, s1&s2) s += tok(min(s1&s2, key=tok)) return s @@ -51,41 +33,15 @@ def f(data): def f2(data): s = 0 for i, (xa, ya, xb, yb, xt, yt) in enumerate(data): - print(f'@1 {i} {xa=}, {ya=}, {xb=}, {yb=}, {xt=}, {yt=}') - #xt += 10_000_000_000_000 - #yt += 10000000000000 - b = 0 - a = 0 - al = 0 - ar = max(xt//xa+1, yt//ya+1) - while ar-al>1: - am = (ar+al)//2 - bl = 0 - br = max(xt//xb+1, yt//yb+1) - f = False - while br-bl>1: - bm = (bl+br)//2 - if xa*am+xb*bm>xt and ya*am+yb*bm>xt: - br = bm - elif xa*am+xb*bm3*br: - al = am - else: - ar = am - print('@end', a, b, a*3+b) - s += a*3+b + 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))