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 part_1(data: List[int], ship_id: int) -> int: """""" outputs: List[int] = IntcodeComputer(data, inpt=ship_id).run().outputs if outputs: return outputs[-1] else: return 0
def part_1(data: List[int], noun: Optional[int] = None, verb: Optional[int] = None) -> int: """Part 1""" data[1] = noun or data[1] data[2] = verb or data[2] return IntcodeComputer(data).run().data[0]
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 test_computation(self): """Testing computation""" data: List[int] = [109, 19] relative_base: int = 2000 computer = IntcodeComputer(data, relative_base=relative_base) computer.computation() result = computer.relative_base self.assertEqual(result, 2019) data: List[int] = [109, 19] + [0 for _ in range(10_000)] relative_base: int = 2019 output: int = 1234 data[1985] = output computer = IntcodeComputer(data, relative_base=relative_base) computer.computation() result = computer.data[1985] 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)
def __init__(self, name: str, data: List[int], phase: int) -> None: self.name = name self.computer = IntcodeComputer(data.copy(), inpt=phase).run() self.connected_from: Optional[Amplifier] = None self.connected_to: Optional[Amplifier] = None
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 part_2(data: List[int], ship_id: int) -> int: """""" return IntcodeComputer(data, inpt=ship_id).run().outputs[-1]
def part_1(intcode_computer_software: List[int]) -> int: """""" intcode_computer = IntcodeComputer(intcode_computer_software) intcode_computer.run() return intcode_computer.outputs
def part_1(data: List[int], inpt: int) -> int: """Part 1""" return IntcodeComputer( data, inpt, extension=1_000_000).run().outputs[-1] # extension <= 1_000_000