From 6ee1e60a8481991ab3cbf4dbc8b6bfe772965a42 Mon Sep 17 00:00:00 2001 From: Luke Hubmayer-Werner Date: Mon, 10 Dec 2018 20:12:38 +1030 Subject: [PATCH] 2018 Day 10 numpy cleanup --- 2018/day10-cleaned.py | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/2018/day10-cleaned.py b/2018/day10-cleaned.py index 084e3e1..ad2016d 100644 --- a/2018/day10-cleaned.py +++ b/2018/day10-cleaned.py @@ -1,27 +1,21 @@ with open('day10-input', 'r') as file: data = [l.strip('\n') for l in file] import numpy as np +import re -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) +numbers = np.array([[int(s) for s in re.findall(r'-?\d+', d)] for d in data], dtype=np.int64) +start_positions = numbers[:,:2] +velocities = numbers[:,2:] max_t = 11000 -curr_pos = np.vstack(positions) -vels = np.vstack(velocities) -positions = np.empty((385,2,max_t)) -heights = np.empty(max_t, dtype=np.int64) - +positions = np.empty((*start_positions.shape, max_t)) for t in range(max_t): - positions[:,:,t] = curr_pos + t*vels - heights[t] = positions[:,1,t].max() - positions[:,1,t].min() + positions[:,:,t] = start_positions + t*velocities + +heights = positions[:,1,:].max(0)-positions[:,1,:].min(0) t = np.argmin(heights) + from pyqtgraph.Qt import QtCore, QtGui import pyqtgraph as pg @@ -31,10 +25,10 @@ win.resize(2000,600) win.setWindowTitle('Scatter Plot') win.show() -p5 = win.addPlot(title=f't={t}') -p5.plot(positions[:,:,t], pen=None, symbol='s', symbolPen=None, symbolSize=10, symbolBrush=(100, 100, 255, 250)) +plot = win.addPlot(title=f't={t}') +plot.plot(positions[:,:,t], pen=None, symbol='s', symbolPen=None, symbolSize=10, symbolBrush=(100, 100, 255, 250)) +plot.getViewBox().invertY(True) -## 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'):