AdventOfCode/2018/day10.py

55 lines
1.5 KiB
Python
Raw Normal View History

with open('day10-input', 'r') as file:
data = [l.strip('\n') for l in file]
import numpy as np
positions = []
velocities = []
for line in data:
pos = [int(line[10:16]), -int(line[18:24])] # Invert Y for graphing purposes
vel = [int(line[36:38]), -int(line[39:42])] # Invert Y for graphing purposes
positions.append(pos)
velocities.append(vel)
max_t = 11000
curr_pos = np.vstack(positions)
vels = np.vstack(velocities)
positions = np.empty((385,2,max_t))
for t in range(max_t):
positions[:,:,t] = curr_pos + t*vels
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
app = QtGui.QApplication([])
win = pg.GraphicsLayoutWidget()
win.resize(2000,600)
win.setWindowTitle('Scatter Plot')
win.show()
p5 = win.addPlot(title="Scatter Plot")
p5.plot(positions[:,:,0], pen=None, symbol='s', symbolPen=None, symbolSize=10, symbolBrush=(100, 100, 255, 250))
def mouseMoved(evt):
pos = evt[0] ## using signal proxy turns original arguments into a tuple
if p5.sceneBoundingRect().contains(pos):
x = pos.x()
# between 1000 and 1100
x = min(x, 2000)//5 + 10300 # 10558
print(x)
if 0 <= x < max_t:
p5.clear()
p5.plot(positions[:, :, int(x)], pen=None, symbol='s', symbolPen=None, symbolSize=10, symbolBrush=(100, 100, 255, 250))
proxy = pg.SignalProxy(p5.scene().sigMouseMoved, rateLimit=60, slot=mouseMoved)
## Start Qt event loop unless running in interactive mode.
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()