def solve(): diagnostic_code_1 = Computer.from_file("AoC-2019-input-5.txt").run_program( [1]) print("Part 1:", diagnostic_code_1) assert diagnostic_code_1 == 11049715 diagnostic_code_2 = Computer.from_file("AoC-2019-input-5.txt").run_program( [5]) print("Part 2:", diagnostic_code_2) assert diagnostic_code_2 == 2140710
class Robot(object): def __init__(self, data, starting_panel): self.brain = Computer(data, starting_panel, pause_on_output=2) self.direction = 0 self.pos = Point(0, 0) self.move_history = [self.pos] self.painted = dict() def turn(self, turn_direction): self.direction = (self.direction + (1 if turn_direction else -1)) % 4 def move(self): move_direction = directions[self.direction] self.pos = Point(self.pos.x + move_direction.x, self.pos.y + move_direction.y) self.move_history.append(self.pos) def detect_color(self): return self.painted[self.pos] if self.pos in self.painted else 0 def step(self): output = self.brain.run_program([self.detect_color()]) if not self.brain.on_fire: panel_color, turn_direction = output self.painted[self.pos] = panel_color self.turn(turn_direction) self.move()
def run_amplifiers(program, settings): amplifiers = [Computer(program, setting, True) for setting in settings] current_amp = cycle(range(len(amplifiers))) signal = 0 while not amplifiers[-1].halted: amp = amplifiers[next(current_amp)] amp.run_program((signal, )) signal = amp.last_output() return signal
def __init__(self, name, amplifier_software, phase_setting=None, input_signal=None): self.amplifier_name = name self._phase_setting = phase_setting self._input_signal = input_signal self._output_signal = 0 self.intcode_computer: Computer = Computer(amplifier_software)
def do(data): field = init_field(MAX_X, MAX_Y) computer = Computer(data, pause_on_output=3, remember_input=False) # Free games computer.program[0] = 2 score = 0 joystick = 0 paddle_x = None ball_x = None while not computer.on_fire: result = computer.run_program([joystick]) if not result: break x, y, tile = result if (x, y) == (-1, 0): score = tile else: field[y][x] = tile if tile == 4: # ball ball_x = x elif tile == 3: # paddle paddle_x = x if ball_x is not None and paddle_x is not None: if ball_x > paddle_x: joystick = 1 elif ball_x == paddle_x: joystick = 0 else: joystick = -1 print_field(field, MAX_Y) return score
from intcode_computer import Computer with open("AoC-2019-input-13.txt") as f: data = [int(x) for x in f.read().strip().split(',')] computer = Computer(data, pause_on_output=3) blocks = set() while not computer.on_fire: result = computer.run_program([]) if result: blocks.add(tuple(result)) block_count = 0 for block in blocks: if block[2] == 2: block_count += 1 print(blocks) print(block_count)
def do(program, input_values=[]): computer = Computer(program, debug=False) computer.run_program(input_values) return computer.output
r.lpush(input_keyname, ship[(x, y)]) # print(f"Telling the computer the current color is {ship[(x, y)]}") # get instructions back from the computer. color = r.brpop(output_keyname)[1] newdir = r.brpop(output_keyname)[1] ship[(x, y)] = color if newdir == b"0": newdir = -1 else: newdir = 1 direction += newdir direction %= 4 x, y = x + directions[direction][0], y + directions[direction][1] c1 = Computer(init_args=[], input_topic="input", output_topic="output") t1 = threading.Thread(target=c1.computer) t2 = threading.Thread(target=handle_computer, daemon=True) t1.start() t2.start() t1.join() print(f"Part 1: {len(ship)}")
def __init__(self, data, starting_panel): self.brain = Computer(data, starting_panel, pause_on_output=2) self.direction = 0 self.pos = Point(0, 0) self.move_history = [self.pos] self.painted = dict()
def init_computer(): with open("AoC-2019-input-15.txt") as infile: program = [int(x) for x in infile.read().strip().split(',')] return Computer(program, pause_on_output=1)
def run_amplifiers(program, settings, input_signal=0): for setting in settings: computer = Computer(program, setting, pause_on_output=1) output_value = computer.run_program([input_signal]) input_signal = output_value return output_value