Example #1
0
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())
Example #2
0
            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],
Example #3
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