37 lines
772 B
Python
37 lines
772 B
Python
#!/usr/bin/env python3
|
|
|
|
from intcode import preproc
|
|
|
|
def partI(exe):
|
|
mp = '\n'.join(''.join(str(next(exe(x, y))) for x in range(50))
|
|
for y in range(50))
|
|
return mp.count('1')
|
|
|
|
def partII(exe):
|
|
def is_beam(x, y):
|
|
return next(exe(x, y)) == 1
|
|
|
|
xs = [(0, 0)]
|
|
y = 100
|
|
width = 0
|
|
while len(xs) < 100 or xs[0][1] - xs[-1][0] < 99:
|
|
x = xs[-1][0]
|
|
while not is_beam(x, y):
|
|
x += 1
|
|
start = x
|
|
x += width
|
|
while is_beam(x, y):
|
|
width += 1
|
|
x += 1
|
|
width -= 1
|
|
end = x-1
|
|
xs.append((start, end))
|
|
if len(xs) > 100:
|
|
xs = xs[-100:]
|
|
y += 1
|
|
|
|
X = start
|
|
Y = y - 100
|
|
return 10**4 * X + Y
|
|
|