class VacuumRobot: def __init__(self): self.brain = Intcode() def load(self, code): self.brain.load(code) def grab_camera(self): self.brain.run() return "".join(map(chr, map(int, self.brain.get_all_outputs().split()))) def run_path(self, order, subpaths): self.brain.code[0] = 2 # switch to the path following mode line = list(map(ord, ",".join(map(str, order)) + "\n")) for c in line: self.brain.add_input(c) for path in subpaths: line = list(map(ord, ",".join(map(str, path)) + "\n")) for c in line: self.brain.add_input(c) line = list(map(ord, "n\n")) for c in line: self.brain.add_input(c) self.brain.run() outputs = self.brain.get_all_outputs().split() return outputs[-1]
class SpringDroid: def __init__(self, data): self.brain = Intcode() self.brain.load(data) def walk(self, code): for line in code: for char in line: self.brain.add_input(ord(char)) self.brain.add_input(ord("\n")) for c in "WALK": self.brain.add_input(ord(c)) self.brain.add_input(ord("\n")) self.brain.run() output = list(map(int, self.brain.get_all_outputs().split())) return output def run(self, code): for items in code: line = " ".join(items) for char in line: self.brain.add_input(ord(char)) self.brain.add_input(ord("\n")) for c in "RUN": self.brain.add_input(ord(c)) self.brain.add_input(ord("\n")) self.brain.run() output = list(map(int, self.brain.get_all_outputs().split())) return output def run_and_score(self, code): for items in code: line = " ".join(items) for char in line: self.brain.add_input(ord(char)) self.brain.add_input(ord("\n")) for c in "RUN": self.brain.add_input(ord(c)) self.brain.add_input(ord("\n")) self.brain.run() output = list(map(int, self.brain.get_all_outputs().split())) outcome = output[-1] if output[-1] > 255 else 0 return self.brain.instructions_executed, outcome
class RescueDrone: def __init__(self, code): self.brain = Intcode() self.brain.load(code) self.commands = { "n": "north", "s": "south", "e": "east", "w": "west", "t": "take", "d": "drop", "i": "inv" } def act(self, command=""): if command != "": if command[0] in self.commands: command = self.commands[command[0]] + command[1:] for c in command: self.brain.add_input(ord(c)) self.brain.add_input(ord("\n")) self.brain.run() outputs = map(chr, map(int, self.brain.get_all_outputs().split())) self.print_output(outputs) def print_output(self, outputs): for c in outputs: print(c, end="")