from lib import str_to_ints def print_points(objs): x_min, x_max = 10**9, 0 y_min, y_max = 10**9, 0 exist = set() for x, y, _, _ in objs: x_min = min(x_min, x) y_min = min(y_min, y) x_max = max(x_max, x) y_max = max(y_max, y) exist.add((x, y)) if x_max - x_min > 67: return False for y in range(y_min, y_max + 1): s = "" for x in range(x_min, x_max + 1): if (x, y) in exist: s += "X" else: s += " " print(s) return True def part_1(data): objs = [] for line in data.splitlines(): x, y, dx, dy = str_to_ints(line) objs.append((x,y, dx, dy)) for t in range(1_000_000): for i in range(len(objs)): x, y, dx, dy = objs[i] on = (x + dx, y + dy, dx, dy) objs[i] = on if print_points(objs): print(t + 1) break def main(): input_file = __file__.replace(".py", ".txt") with open(input_file) as f: data = f.read() part_1(data) if __name__ == "__main__": main()