class EHPR(): def __init__(self, program): self.painted = defaultdict(int) self.position = Position(0,0) self.direction = Direction.Up self.computer = IntcodeComputer(program, [], "Emergency Hull Painting Robot", 0) def set_start_color(self, color): self.painted[self.position] = color def move(self, command): new_direction = (Direction(((self.direction.value + 1) % 4)) if command else Direction(((self.direction.value - 1) % 4))) new_position = Position(*(sum(x) for x in zip(self.position, movement[new_direction]))) self.direction = new_direction self.position = new_position def paint_square(self, color): self.painted[self.position] = color def execute_step(self): self.computer.add_input(self.painted[self.position]) self.computer.run_program() output = self.computer.get_output() color, command = output[-2:] self.paint_square(color) self.move(command)
class FlyingDrone(): def __init__(self, program): self.current_position = Position(0, 0) self.computer = IntcodeComputer(program, list(Position(0, 0)), "SpaceDroneNavigation") def navigate_to_pos(self, position): self.computer.add_prog_input(list(position)) self.computer.run_program() output = self.computer.get_output() self.current_position = position return output[0]
def to_ascii_instruction(instruction): ascii_instr = [] for char in instruction: ascii_instr.append(ord(char)) return ascii_instr def print_output(intcode_instruction): str = '' for digit in intcode_instruction: str = str + chr(digit) print(str) adventure = IntcodeComputer(input_prog, [], "Cryostasis") adventure.run_program() output = adventure.get_output() print_output(output) while not adventure.has_stopped(): get_input = input(">") input_instruction = to_ascii_instruction(get_input + "\n") adventure.add_prog_input(input_instruction) adventure.run_program() output = adventure.get_output() print_output(output) print("Game Over.")
input_list = data.split(',') input_prog = list(map(int, input_list)) instruction = """NOT C J OR D T AND T J NOT A T OR T J WALK """ ascii_instr = to_ascii_instruction(instruction) springdroid = IntcodeComputer(input_prog, ascii_instr, "Spring Droid Machine") springdroid.run_program() last_moments = springdroid.get_output() #draw_last_moments(last_moments) print("Silver: %i" % last_moments[-1]) ### PART 2 print("\n PART 2 START \n") instruction = """NOT C J NOT A T OR T J NOT B T OR T J NOT D T NOT T T AND T J AND E T
input_list = data.split(',') input_prog = list(map(int, input_list)) ### PART 1 intcode_network = dict() for i in range(50): computer = IntcodeComputer(input_prog, [i], "Network Address %i" % i) intcode_network[i] = computer run_network = True while run_network: for id, computer in intcode_network.items(): print("Run computer %i" % id) computer.run_program() output = computer.get_output() print(output) if output: if output[0] == 255: run_network = False print("Silver: %i" % output[2]) break chunk_size = 3 for i in range(0, len(output), chunk_size): instruction = output[i:i + chunk_size] intcode_network[instruction[0]].add_prog_input(instruction[1:]) ### PART 2 class NAT(): def __init__(self):