237 tokens in Python for part 2 by Allan Taylor
Download solution
importre
data=[tuple(map(int,re.findall(r"-?\d+",line)))forlineinopen(0).read().splitlines()]
width=101
height=103
defspread(locations):
xs,ys=zip(*locations)
mx=sum(xs)/len(xs)
my=sum(ys)/len(ys)
ex=sum(abs(x-mx)forxinxs)
ey=sum(abs(y-my)foryinys)
returnex,ey
min_x_spread=min_y_spread=10**10
min_x_spread_time=min_y_spread_time=0
n_loops=max(width,height)
fortimeinrange(n_loops):
sx,sy=spread(((px+vx*time)%width,(py+vy*time)%height)forpx,py,vx,vyindata)
ifsx<min_x_spread:
min_x_spread=sx
min_x_spread_time=time
ifsy<min_y_spread:
min_y_spread=sy
min_y_spread_time=time
print(next(iforiinrange(width*height)ifi%width==min_x_spread_timeandi%height==min_y_spread_time))