10.py
1 from lib import * 2 3 input = read_input(2018, 10) 4 5 6 points = [] 7 for line in input.splitlines(): 8 x, y, vx, vy = map(int, re.match(r"^position=< *(-?\d+), *(-?\d+)> velocity=< *(-?\d+), *(-?\d+)>$", line).groups()) 9 points.append((x, y, vx, vy)) 10 11 i = 0 12 best = 1e1337 13 prev = None 14 while True: 15 p = {} 16 minx = miny = 1e1337 17 maxx = maxy = -1e1337 18 for x, y, vx, vy in points: 19 x += vx * i 20 y += vy * i 21 minx = min(x, minx) 22 maxx = max(x, maxx) 23 miny = min(y, miny) 24 maxy = max(y, maxy) 25 p[(x, y)] = True 26 dist = maxx - minx + maxy - miny 27 28 if dist < best: 29 best = dist 30 i += 1 31 prev = p 32 else: 33 for y in range(miny, maxy + 1): 34 print("".join(" #"[prev.get((x, y), False)] for x in range(minx, maxx + 1))) 35 break 36 37 38 points = [] 39 for line in input.splitlines(): 40 x, y, vx, vy = map(int, re.match(r"^position=< *(-?\d+), *(-?\d+)> velocity=< *(-?\d+), *(-?\d+)>$", line).groups()) 41 points.append((x, y, vx, vy)) 42 43 i = 0 44 best = 1e1337 45 prev = None 46 while True: 47 p = {} 48 minx = miny = 1e1337 49 maxx = maxy = -1e1337 50 for x, y, vx, vy in points: 51 x += vx * i 52 y += vy * i 53 minx = min(x, minx) 54 maxx = max(x, maxx) 55 miny = min(y, miny) 56 maxy = max(y, maxy) 57 p[(x, y)] = True 58 dist = maxx - minx + maxy - miny 59 60 if dist < best: 61 best = dist 62 i += 1 63 prev = p 64 else: 65 print(i - 1) 66 break