def run_robot(facing, pos, colour): inq = Queue() outq = Queue() robot = IntCode(memory.copy(), inq, outq) robot.start() grid = {} grid[pos] = colour inq.put(colour) DX = {0: 1, 1: 0, 2: -1, 3: 0} DY = {0: 0, 1: 1, 2: 0, 3: -1} while robot.is_alive(): colour = outq.get() turn = outq.get() grid[pos] = colour facing = (facing + (1 if turn else -1)) % 4 pos = (pos[0] + DX[facing], pos[1] + DY[facing]) inq.put(grid[pos] if pos in grid else 0) return grid
from queue import Queue from intcode import print_grid, IntCode with open('13.in') as f: memory = [int(x.strip()) for x in f.read().split(',')] inq = Queue() outq = Queue() t = IntCode(memory.copy(), inq, outq) t.start() blocks = 0 grid = {} while t.is_alive(): (x, y, i) = (outq.get(), outq.get(), outq.get()) grid[(x, y)] = i t.join() blocks = 0 for pos, tile in grid.items(): if tile == 2: blocks += 1 print('part 1: ', blocks) grid_values = {0: ' ', 1: '█', 2: '#', 3: '-', 4: 'o'} with open('13.in') as f: memory = [int(x.strip()) for x in f.read().split(',')] print('part 2') inq = Queue() outq = Queue() memory[0] = 2 t = IntCode(memory.copy(), inq, outq)