Пример #1
0
 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
Пример #2
0
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
Пример #3
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]
Пример #4
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)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
 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
Пример #8
0
    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)
Пример #9
0
def part_2(data: List[int], ship_id: int) -> int:
    """"""
    return IntcodeComputer(data, inpt=ship_id).run().outputs[-1]
Пример #10
0
def part_1(intcode_computer_software: List[int]) -> int:
    """"""
    intcode_computer = IntcodeComputer(intcode_computer_software)
    intcode_computer.run()
    return intcode_computer.outputs
Пример #11
0
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