Exemplo n.º 1
0
def valid(x, y, memory):
    inq = Queue()
    outq = Queue()
    t = IntCode(memory.copy(), inq, outq)
    t.start()
    inq.put(x)
    inq.put(y)
    t.join()
    return outq.get()
Exemplo n.º 2
0
def part1(memory):
    max_signal = 0
    max_order = []
    for order in itertools.permutations([0, 1, 2, 3, 4], 5):
        signal = 0
        input_queue = Queue()
        output_queue = Queue()
        for i in order:
            input_queue.put(i)
            input_queue.put(signal)
            cur_thread = IntCode(memory.copy(), input_queue, output_queue)
            cur_thread.start()
            cur_thread.join()
            signal = output_queue.get()

        if signal > max_signal:
            max_signal = signal
            max_order = order
    print(max_order, max_signal)
Exemplo n.º 3
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)