#!/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