def test_intcode_computer(self): """()""" data: List[int] = [1, 0, 0, 0, 99] outputs: List[int] = [2, 0, 0, 0, 99] computer = IntcodeComputer(data) result = computer.run().data self.assertEqual(result, outputs) data: List[int] = [2, 3, 0, 3, 99] output: List[int] = [2, 3, 0, 6, 99] computer = IntcodeComputer(data) result = computer.run().data self.assertEqual(result, output) data: List[int] = [2, 4, 4, 5, 99, 0] output: List[int] = [2, 4, 4, 5, 99, 9801] computer = IntcodeComputer(data) result = computer.run().data self.assertEqual(result, output) data: List[int] = [1, 1, 1, 4, 99, 5, 6, 0, 99] output: List[int] = [30, 1, 1, 4, 2, 5, 6, 0, 99] computer = IntcodeComputer(data) result = computer.run().data self.assertEqual(result, output)
def test_intcode_computer(self): """Testing intcode_computer""" data: List[int] = [109, 1, 204, -1, 1001, 100, 1, 100, 1008, 100, 16, 101, 1006, 101, 0, 99] extension: int = 100_000 output = data.copy() computer = IntcodeComputer(data, extension=extension) result = computer.run().outputs self.assertEqual(result, output) data: List[int] = [1102, 34915192, 34915192, 7, 4, 7, 99, 0] extension: int = 100_000 output: int = 16 computer = IntcodeComputer(data, extension=extension) result = len(str(computer.run().outputs[-1])) self.assertEqual(result, output) data: List[int] = [104, 1125899906842624, 99] extension: int = 100_000 output: int = 1125899906842624 computer = IntcodeComputer(data, extension=extension) result = computer.run().outputs[-1] self.assertEqual(result, output)
class EmergencyHullPaintingRobot: """""" def __init__(self, program: List[int], grid: List[List[int]], position: Tuple[int, int], direction: Tuple[int, int], painted_fields: Set[Tuple[int, int]])\ -> None: self.computer = IntcodeComputer(program) self.grid = grid self.position = position self.direction = direction self.painted_fields = painted_fields def calc_new_direction(self) -> None: """""" if self.computer.outputs[-1]: # right turn self.direction = (-self.direction[1], self.direction[0]) else: # left turn self.direction = (self.direction[1], -self.direction[0]) def move(self) -> None: """""" self.computer.inpt = self.grid[self.position[1]][self.position[0]] print(self.computer.address) print(self.position) # for line in self.grid: # print(line) self.computer.run() self.grid[self.position[1]][ self.position[0]] = self.computer.outputs[0] self.painted_fields.add(self.position) self.calc_new_direction() self.position = vector_addition_2d(self.position, self.direction)
def part_1(intcode_computer_software: List[int]) -> int: """""" intcode_computer = IntcodeComputer(intcode_computer_software) intcode_computer.run() return intcode_computer.outputs