Exemple #1
0
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
Exemple #2
0
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)