import itertools import logging import file_utils from intcode_interpreter import IntcodeInterpreter logging.basicConfig(level=logging.INFO) if __name__ == "__main__": operations = file_utils.read_comma_delimited_ints("input07.txt") phase_settings = list(itertools.permutations([5, 6, 7, 8, 9])) max_output = -1 last_output = 0 for phase_setting in phase_settings: # Initialize computers = [] for i in range(0, len(phase_setting)): inputs = [phase_setting[i], 0] print ("Phase setting %d is %d" % (i, phase_setting[i])) computers.append(IntcodeInterpreter(list(operations), inputs)) # Start feedback loop amplifier = 0 starting_round = True while not computers[4].finished: logging.info("Activate computer nr %d" % amplifier) logging.info("Instruction pointer is at %d" % computers[amplifier].instruction_pointer) logging.info(computers[amplifier].get_memory())
pass outputs = new_robot.get_outputs() if outputs[0] == 1: new_position = (position[0] + direction.twod_direction[0], position[1] + direction.twod_direction[1]) output = oxygen_tracker(new_robot, new_position, direction.twod_direction, current_time + 1) if output > local_max: local_max = output return local_max if __name__ == "__main__": instructions = file_utils.read_comma_delimited_ints("input15.txt") robot = IntcodeInterpreter(instructions, []) last_output = 1 direction = Direction.NORTH pos = (0, 0) while not robot.finished: print("Moving %s" % direction) direction = calculate_direction(last_output, direction) robot.set_inputs([direction.input_code]) while robot.process_next_code(): pass last_output = robot.get_outputs()[0] if last_output == 0: pos = (pos[0] + direction.twod_direction[0],
self.num_visited = num_visited def __repr__(self): return "Place: (%d, %d); Color: %d; Visited: %d" % (self.place.x, self.place.y, self.color, self.num_visited) def visit(self, new_color): self.color = new_color self.num_visited += 1 def find_field(fields, position): return fields[position] if position in fields else Field(pos, 0, 0) if __name__ == "__main__": memory = file_utils.read_comma_delimited_ints("test.txt") instructions = IntcodeInterpreter(memory, []) visited_fields = {Point(0, 0): Field(Point(0, 0), 0, 0)} pos = Point(0, 0) dir = Point(0, 1) step_counter = 0 while not instructions.finished: new_input = find_field(visited_fields, pos) instructions.set_inputs([new_input.color]) logging.info("Setting input %d on pos %s" % (new_input.color, pos)) step_counter += 1 while instructions.process_next_code(): pass