Little bit of fixup on 2018 Day 13
This commit is contained in:
parent
ba7f08b6ca
commit
fd0e250f5e
|
@ -2,9 +2,6 @@ with open('day13-input', 'r') as file:
|
||||||
data = [l.strip('\n') for l in file]
|
data = [l.strip('\n') for l in file]
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
grid = np.zeros((len(data[0]), len(data)), dtype=np.int64)
|
|
||||||
minecarts = []
|
|
||||||
|
|
||||||
codes = {
|
codes = {
|
||||||
' ': 0,
|
' ': 0,
|
||||||
'-': 1,
|
'-': 1,
|
||||||
|
@ -19,25 +16,28 @@ carts = {
|
||||||
'<': (2, 1),
|
'<': (2, 1),
|
||||||
'^': (3, 2),
|
'^': (3, 2),
|
||||||
}
|
}
|
||||||
|
|
||||||
directions = np.array([[1,0], [0,1], [-1,0], [0,-1]])
|
directions = np.array([[1,0], [0,1], [-1,0], [0,-1]])
|
||||||
turns = [-1, 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 y, line in enumerate(data):
|
||||||
for x, char in enumerate(line):
|
for x, char in enumerate(line):
|
||||||
if char in codes:
|
if char in codes:
|
||||||
grid[x,y] = codes[char]
|
grid[x,y] = codes[char]
|
||||||
else:
|
else:
|
||||||
grid[x,y] = carts[char][1]
|
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:
|
while len(minecarts) > 1:
|
||||||
minecarts = sorted(minecarts, key=lambda c: (c[1], c[0]))
|
minecarts = sorted(minecarts, key=lambda c: (c[1], c[0]))
|
||||||
i = 0
|
i = 0
|
||||||
while i < len(minecarts):
|
while i < len(minecarts):
|
||||||
mc = minecarts[i]
|
mc = minecarts[i]
|
||||||
mc[:2] = list(mc[:2]+directions[mc[2]])
|
mc[:2] += directions[mc[2]]
|
||||||
g = grid[tuple(mc[:2])]
|
g = grid[tuple(mc[:2])]
|
||||||
|
|
||||||
if g in (1, 2):
|
if g in (1, 2):
|
||||||
pass
|
pass
|
||||||
elif g == 4:
|
elif g == 4:
|
||||||
|
@ -45,13 +45,14 @@ while len(minecarts) > 1:
|
||||||
elif g == 5:
|
elif g == 5:
|
||||||
mc[2] = (1, 0, 3, 2)[mc[2]]
|
mc[2] = (1, 0, 3, 2)[mc[2]]
|
||||||
elif g == 3:
|
elif g == 3:
|
||||||
mc[2] = (mc[2]+turns[mc[3]]) % 4
|
mc[2] = (mc[2] + turns[mc[3]]) % 4
|
||||||
mc[3] = (mc[3]+1) % 3
|
mc[3] = (mc[3] + 1) % 3
|
||||||
|
|
||||||
for j, mc2 in enumerate(minecarts):
|
for j, mc2 in enumerate(minecarts):
|
||||||
if mc2 == mc:
|
if j == i:
|
||||||
continue
|
continue
|
||||||
if np.array_equal(mc[:2], mc2[:2]):
|
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:
|
if j > i:
|
||||||
minecarts.pop(j)
|
minecarts.pop(j)
|
||||||
minecarts.pop(i)
|
minecarts.pop(i)
|
||||||
|
@ -61,5 +62,8 @@ while len(minecarts) > 1:
|
||||||
minecarts.pop(j)
|
minecarts.pop(j)
|
||||||
i -= 2
|
i -= 2
|
||||||
break
|
break
|
||||||
|
|
||||||
i += 1
|
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
|
||||||
|
|
Loading…
Reference in New Issue