diff --git a/2018/day13.py b/2018/day13.py index cc884c9..9a0bf0c 100644 --- a/2018/day13.py +++ b/2018/day13.py @@ -2,9 +2,6 @@ with open('day13-input', 'r') as file: data = [l.strip('\n') for l in file] import numpy as np -grid = np.zeros((len(data[0]), len(data)), dtype=np.int64) -minecarts = [] - codes = { ' ': 0, '-': 1, @@ -19,25 +16,28 @@ carts = { '<': (2, 1), '^': (3, 2), } - directions = np.array([[1,0], [0,1], [-1,0], [0,-1]]) turns = [-1, 0, 1] +grid = np.zeros((len(data[0]), len(data)), dtype=np.int64) +minecarts = [] + for y, line in enumerate(data): for x, char in enumerate(line): if char in codes: grid[x,y] = codes[char] else: grid[x,y] = carts[char][1] - minecarts.append([x, y, carts[char][0], 0]) + minecarts.append(np.array([x, y, carts[char][0], 0])) while len(minecarts) > 1: minecarts = sorted(minecarts, key=lambda c: (c[1], c[0])) i = 0 while i < len(minecarts): mc = minecarts[i] - mc[:2] = list(mc[:2]+directions[mc[2]]) + mc[:2] += directions[mc[2]] g = grid[tuple(mc[:2])] + if g in (1, 2): pass elif g == 4: @@ -45,13 +45,14 @@ while len(minecarts) > 1: elif g == 5: mc[2] = (1, 0, 3, 2)[mc[2]] elif g == 3: - mc[2] = (mc[2]+turns[mc[3]]) % 4 - mc[3] = (mc[3]+1) % 3 + mc[2] = (mc[2] + turns[mc[3]]) % 4 + mc[3] = (mc[3] + 1) % 3 + for j, mc2 in enumerate(minecarts): - if mc2 == mc: + if j == i: continue if np.array_equal(mc[:2], mc2[:2]): - print('Crash at', mc[:2]) + print(f'Crash at {mc[0]},{mc[1]}') # First crash is Part 1 if j > i: minecarts.pop(j) minecarts.pop(i) @@ -61,5 +62,8 @@ while len(minecarts) > 1: minecarts.pop(j) i -= 2 break + i += 1 -print('Last cart', minecarts[0]) + +mc = minecarts[0] +print(f'Last cart at {mc[0]},{mc[1]} with direction {mc[2]} and next intersection turn {mc[3]}') # Part 2