def run_two(self, inputs): intcode_a = Intcode(self.code[:], [inputs[0], 0], name='A') intcode_b = Intcode(self.code[:], [inputs[1]], name='B') intcode_c = Intcode(self.code[:], [inputs[2]], name='C') intcode_d = Intcode(self.code[:], [inputs[3]], name='D') intcode_e = Intcode(self.code[:], [inputs[4]], name='E') while intcode_a.is_running() and intcode_b.is_running( ) and intcode_c.is_running() and intcode_a.is_running( ) and intcode_d.is_running() and intcode_e.is_running(): intcode_a.run() if intcode_b.is_running() and len(intcode_a.outputs) > 0: intcode_b.inputs += intcode_a.outputs intcode_a.outputs = [] intcode_b.run() if intcode_c.is_running() and len(intcode_b.outputs) > 0: intcode_c.inputs += intcode_b.outputs intcode_b.outputs = [] intcode_c.run() if intcode_d.is_running() and len(intcode_c.outputs) > 0: intcode_d.inputs += intcode_c.outputs intcode_c.outputs = [] intcode_d.run() if intcode_e.is_running() and len(intcode_d.outputs) > 0: intcode_e.inputs += intcode_d.outputs intcode_d.outputs = [] intcode_e.run() if intcode_a.is_running() and len(intcode_e.outputs) > 0: intcode_a.inputs += intcode_e.outputs intcode_e.outputs = [] return intcode_e.outputs[0]
with open('inputs/day13.in') as f: data = f.read().strip() bx, by = 0, 0 px, py = 0, 0 comp = Intcode(data, []) comp.codes[0] = 2 score = 0 while not comp.halted: comp.run() for i in range(0, len(comp.outputs), 3): x, y, tile = comp.outputs[i:i + 3] if tile > 4: score = tile elif tile == 4: bx, by = x, y elif tile == 3: px, py = x, y comp.outputs = [] if bx > px: joystick = 1 elif bx < px: joystick = -1 else: joystick = 0 comp.inputs.append(joystick) print(score)