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()
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)
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)