diff --git a/day14/sol.py b/day14/sol.py index 9b25c16..88d85bc 100644 --- a/day14/sol.py +++ b/day14/sol.py @@ -9,68 +9,42 @@ def parse(file): def solve(file, W, H): robots = parse(file) - print(robots) - robots = [iterate(r, 100, W, H) for r in robots] - print(robots) - mx = W//2 - my = H//2 - quads = {1:[], 2:[], 3:[], 4:[]} - print(mx,my) - for (x,y),_ in robots: - q = 0 - if x < mx and y < my: q = 1 - if x > mx and y < my: q = 2 - if x < mx and y > my: q = 3 - if x > mx and y > my: q = 4 - if q > 0: - quads[q].append((x,y)) - print(quads) + #print(robots) - total = 1 - for v in quads.values(): - total *= len(v) + robots100 = [iterate(r, 100, W, H) for r in robots] + #print(robots100) - print(total) + q = quad_score(robots100, W, H) + print(q) -def solve2(file, W, H): - robots = parse(file) - mq = float('inf') + minq = float('inf') + mint = 0 for t in range(0, W*H): - rs = lambda: (iterate(r, t, W, H) for r in robots) - q = quads(rs(), W, H) - qs = q[0]*q[1]*q[2]*q[3] - if mq > qs: - mq = qs - if qs == mq: - picture = [["."]*W for _ in range(H)] - for (x,y),_ in rs(): - if y < H: - picture[y][x] = "#" - for line in picture: - print("".join(line)) - print("t = ", t, "q = ", qs) - - #input(">") + rs = (iterate(r, t, W, H) for r in robots) + q = quad_score(rs, W, H) + if minq > q: + minq = q + mint = t - # 442? - # 493 - + picture = [["."]*W for _ in range(H)] + for r in robots: + (x,y),_ = iterate(r, mint, W, H) + picture[y][x] = "#" + for line in picture: + print("".join(line)) -def quads(robots, W, H): + print("t = ", mint, "q = ", minq) + +def quad_score(robots, W, H): mx = W//2 my = H//2 q1, q2, q3, q4 = 0, 0, 0, 0 - #seen = set() - for (x,y),_ in robots: - #if (x,y) in seen: - # continue - #seen.add((x,y)) if x < mx and y < my: q1 += 1 if x > mx and y < my: q2 += 1 if x < mx and y > my: q3 += 1 if x > mx and y > my: q4 += 1 - return [q1, q2, q3, q4] + return q1*q2*q3*q4 def iterate(robot, t, W, H): (px,py), (vx,vy) = robot @@ -78,6 +52,5 @@ def iterate(robot, t, W, H): py = (py+vy*t)%H return (px,py), (vx,vy) -#solve(open("sample1.in"), 11, 7) -#solve(open("input"), 101, 103) -solve2(open("input"), 101, 103) +solve(open("sample1.in"), 11, 7) +solve(open("input"), 101, 103)