55 lines
1.1 KiB
Python
55 lines
1.1 KiB
Python
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()
|