diff --git a/2025-python/output/day_09.py b/2025-python/output/day_09.py index 9bc5f03..17434b1 100644 --- a/2025-python/output/day_09.py +++ b/2025-python/output/day_09.py @@ -1,6 +1,5 @@ from math import inf from itertools import combinations - from output import ints @@ -42,43 +41,59 @@ def solve(data): break S = E V = V | W + + def _within(a, b): + y1, x1 = a + y2, x2 = b + T = min(y1, y2) + R = max(x1, x2) + B = max(y1, y2) + L = min(x1, x2) + return all([ + sum((r, L + 1) in W for r in range(T + 1, B)) % 2 == 0, + sum((r, R - 1) in W for r in range(T + 1, B)) % 2 == 0, + sum((T + 1, c) in W for c in range(L + 1, R)) % 2 == 0, + sum((B - 1, c) in W for c in range(L + 1, R)) % 2 == 0, + ]) + + S = len(list(combinations(A, r=2))) + i = 0 for a, b in combinations(A, r=2): + i += 1 + if i % 100 == 0: + print(f"{str(i):>6} / {S}") y1, x1 = a y2, x2 = b x = abs(x1 - x2) + 1 y = abs(y1 - y2) + 1 p1 = max(p1, x * y) - if _within(W, a, b, T, R, B, L): + if _within(a, b): p2 = max(p2, max(p2, x * y)) return p1, p2 -def _within(W, a, b, T, R, B, L): - y1, x1 = a - y2, x2 = b - for r in range(min(y1, y2) + 1, max(y1, y2)): - for c in range(min(x1, x2) + 1, max(x1, x2)): - if (r, c) in W: - continue - for s, e in [(T, r), (r, B)]: - z = sum((nr, c) in W for nr in range(s, e)) - if z and z % 2 == 0: - return False - for s, e in [(L, c), (c, R)]: - z = sum((r, nc) in W for nc in range(s, e)) - if z and z % 2 == 0: - return False - return True if __name__ == "__main__": with open("./input/09.txt", "r") as f: inp = f.read().strip() + in_p = """ + 7,1 +11,1 +11,7 +9,7 +9,5 +2,5 +2,3 +7,3 """.strip() + p1, p2 = solve(inp) print(p1) print(p2) - assert p1 == 4749838800 - assert p2 == 1624057680 + assert p1 == 50 + assert p2 == 24 + # assert p1 == 4749838800 + # assert p2 == 1624057680 diff --git a/2025-python/output/day_10.py b/2025-python/output/day_10.py index c33f965..2aee967 100644 --- a/2025-python/output/day_10.py +++ b/2025-python/output/day_10.py @@ -1,4 +1,6 @@ import re +import functools +from math import inf from pprint import pprint from collections import deque, Counter, defaultdict from heapq import heappop, heappush @@ -10,20 +12,38 @@ from output import matrix, D, DD, ADJ, ints, sints, mhd, mdbg, vdbg, cw, ccw, bk def solve(data): r = r"^\[(.+)\] (.+) \{(.+)\}$" p1 = 0 - for line in data.splitlines(): - il, b, _j = re.findall(r, line)[0] + + for j, line in enumerate(data.splitlines(), start=1): + il, b, j = re.findall(r, line)[0] B = [set(ints(s)) for s in b.split()] E = set([i for i, s in enumerate(il) if s == "#"]) - Q = [(b, set(), 0) for b in B] - while Q: - b, lit, p = Q.pop(0) - if lit == E: - p1 += p - break - for nb in B: - if nb == b: - continue - Q.append((nb, lit ^ b, p + 1)) + J = ints(j) + + p = 0 + L = set() + while L != E: + p += 1 + for bp in combinations(B, p): + L = set() + for b in bp: + L = L ^ b + if L == E: + break + if L == E: + break + # p = 0 + # L = [0] * len(J) + # while L != J: + # p += 1 + # for bp in combinations(B, p): + # L = set() + # for b in bp: + # L = L ^ b + # if L == E: + # break + # if L == E: + # break + p1 += p p2 = None return p1, p2 @@ -49,8 +69,8 @@ if __name__ == "__main__": print(p1) os.system(f"echo {p1} | wl-copy") - # print(p2) - # os.system(f"echo {p2} | wl-copy") + print(p2) + os.system(f"echo {p2} | wl-copy") # uncomment and replace 0 with actual output to refactor code # and ensure nonbreaking changes diff --git a/2025-python/output/day_11.py b/2025-python/output/day_11.py index 61b7a0f..7f6c25f 100644 --- a/2025-python/output/day_11.py +++ b/2025-python/output/day_11.py @@ -3,10 +3,10 @@ from collections import defaultdict def solve(data): - G = defaultdict(set) + G = defaultdict(list) for line in data.splitlines(): f, *t = line.split() - G[f[:-1]] = set(t) + G[f[:-1]] = t @functools.cache def _traverse(k, fasttrack=True, fft=False, dac=False): @@ -15,7 +15,7 @@ def solve(data): return sum( _traverse(nk, fasttrack, fft or k == "fft", dac or k == "dac") for nk in G[k] - ) + ) return _traverse("you"), _traverse("svr", fasttrack=False)