Day 11 - UGLY AF
This commit is contained in:
50
day11/part2.py
Normal file
50
day11/part2.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import numpy as np
|
||||
from day11.common import char_to_int
|
||||
|
||||
lines = np.array([[char_to_int(x) for x in line.strip()] for line in open("input.txt")], dtype=np.byte)
|
||||
shape = lines.shape
|
||||
|
||||
RAYS = [(-1, -1), (0, -1), (1, -1), (-1, 0), (1, 0), (-1, 1), (0, 1), (1, 1)]
|
||||
|
||||
last = -1
|
||||
while True:
|
||||
curr = np.count_nonzero(lines == 1)
|
||||
if curr == last:
|
||||
print(last)
|
||||
break
|
||||
last = curr
|
||||
|
||||
new = np.zeros_like(lines, dtype=np.byte)
|
||||
for idx, val in np.ndenumerate(lines):
|
||||
if val == 0:
|
||||
continue
|
||||
if val == -1:
|
||||
found = False
|
||||
for ray in RAYS:
|
||||
ray = np.array(ray)
|
||||
pos = np.array(idx) + ray
|
||||
while 0 <= pos[0] < shape[0] and 0 <= pos[1] < shape[1]:
|
||||
if lines[tuple(pos)] == 1:
|
||||
found = True
|
||||
break
|
||||
elif lines[tuple(pos)] == -1:
|
||||
break
|
||||
pos = pos + ray
|
||||
if found:
|
||||
break
|
||||
new[idx] = 1 if not found else -1
|
||||
continue
|
||||
if val == 1:
|
||||
found = 0
|
||||
for ray in RAYS:
|
||||
ray = np.array(ray)
|
||||
pos = np.array(idx) - ray
|
||||
while 0 <= pos[0] < shape[0] and 0 <= pos[1] < shape[1]:
|
||||
if lines[tuple(pos)] == 1:
|
||||
found += 1
|
||||
break
|
||||
elif lines[tuple(pos)] == -1:
|
||||
break
|
||||
pos = pos - ray
|
||||
new[idx] = -1 if found >= 5 else 1
|
||||
lines = new
|
||||
Reference in New Issue
Block a user