Ejemplo n.º 1
0
def get_ship_map():
    robot = Computer(read("inputs/day_15.txt"))
    pos = (0, 0)
    ship_map = {}
    moves = []

    # contains directions (value) we haven't attempted for each
    # coordinate (key)
    unexplored = {}

    while True:
        if pos not in unexplored:
            unexplored[pos] = [1, 2, 3, 4]

        if unexplored[pos]:
            back_tracking = False
            move = unexplored[pos].pop()
        else:
            back_tracking = True

            if not moves:  # backtracked to start
                return ship_map

            prev = moves.pop()
            move = get_opposite(prev)

        robot.add_input(move)
        status = robot.run()

        if status in (SUCCESSFUL_MOVE, OXYGEN):
            pos = make_move(pos, move)
            ship_map[pos] = status

            if not back_tracking:
                moves.append(move)
Ejemplo n.º 2
0
def part_two():
    computer = Computer(read("inputs/day_13.txt"))
    computer.code[0] = 2

    game = Game()
    outputs = []
    while not computer.finished:
        outputs.append(computer.run())

        if len(outputs) == 3:
            tile = outputs.pop()
            row = outputs.pop()
            col = outputs.pop()

            game.update(row, col, tile)
            computer.add_input(game.get_ai_move())

    return game.score
Ejemplo n.º 3
0
def get_painted_panels(starting_panel):
    painter = Computer(read("inputs/day_11.txt"))
    painter.add_input(starting_panel)

    panels = defaultdict(int)
    direction = 0
    position = (0, 0)

    outputs = []
    while (output := painter.run()) is not None:
        outputs.append(output)

        if len(outputs) == 2:
            turn = outputs.pop()
            colour = outputs.pop()

            panels[position] = colour

            direction = make_turn(direction, turn)
            position = make_move(position, direction)

            painter.add_input(panels[position])
Ejemplo n.º 4
0
def part_one():
    c = Computer(read("inputs/day_09.txt"))
    c.add_input(1)
    return c.run()
Ejemplo n.º 5
0
def beam(x, y):
    c = Computer(read("inputs/day_19.txt"))
    c.add_input(x)
    c.add_input(y)
    return int(c.run())