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)
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
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])
def part_one(): c = Computer(read("inputs/day_09.txt")) c.add_input(1) return c.run()
def beam(x, y): c = Computer(read("inputs/day_19.txt")) c.add_input(x) c.add_input(y) return int(c.run())