day 14 cleanup

magical 2024-12-14 06:07:28 +00:00
parent 35312d30d8
commit 608b687cfd
1 changed files with 24 additions and 51 deletions

View File

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