示例#1
0
def solve():
    diagnostic_code_1 = Computer.from_file("AoC-2019-input-5.txt").run_program(
        [1])
    print("Part 1:", diagnostic_code_1)
    assert diagnostic_code_1 == 11049715

    diagnostic_code_2 = Computer.from_file("AoC-2019-input-5.txt").run_program(
        [5])
    print("Part 2:", diagnostic_code_2)
    assert diagnostic_code_2 == 2140710
示例#2
0
class Robot(object):
    def __init__(self, data, starting_panel):
        self.brain = Computer(data, starting_panel, pause_on_output=2)
        self.direction = 0
        self.pos = Point(0, 0)
        self.move_history = [self.pos]
        self.painted = dict()

    def turn(self, turn_direction):
        self.direction = (self.direction + (1 if turn_direction else -1)) % 4

    def move(self):
        move_direction = directions[self.direction]
        self.pos = Point(self.pos.x + move_direction.x,
                         self.pos.y + move_direction.y)
        self.move_history.append(self.pos)

    def detect_color(self):
        return self.painted[self.pos] if self.pos in self.painted else 0

    def step(self):
        output = self.brain.run_program([self.detect_color()])
        if not self.brain.on_fire:
            panel_color, turn_direction = output
            self.painted[self.pos] = panel_color
            self.turn(turn_direction)
            self.move()
示例#3
0
def run_amplifiers(program, settings):
    amplifiers = [Computer(program, setting, True) for setting in settings]
    current_amp = cycle(range(len(amplifiers)))
    signal = 0
    while not amplifiers[-1].halted:
        amp = amplifiers[next(current_amp)]
        amp.run_program((signal, ))
        signal = amp.last_output()
    return signal
 def __init__(self,
              name,
              amplifier_software,
              phase_setting=None,
              input_signal=None):
     self.amplifier_name = name
     self._phase_setting = phase_setting
     self._input_signal = input_signal
     self._output_signal = 0
     self.intcode_computer: Computer = Computer(amplifier_software)
示例#5
0
def do(data):
    field = init_field(MAX_X, MAX_Y)
    computer = Computer(data, pause_on_output=3, remember_input=False)
    # Free games
    computer.program[0] = 2

    score = 0
    joystick = 0
    paddle_x = None
    ball_x = None
    while not computer.on_fire:
        result = computer.run_program([joystick])
        if not result:
            break
        x, y, tile = result
        if (x, y) == (-1, 0):
            score = tile
        else:
            field[y][x] = tile

            if tile == 4:
                # ball
                ball_x = x
            elif tile == 3:
                # paddle
                paddle_x = x

        if ball_x is not None and paddle_x is not None:
            if ball_x > paddle_x:
                joystick = 1
            elif ball_x == paddle_x:
                joystick = 0
            else:
                joystick = -1
        print_field(field, MAX_Y)
    return score
示例#6
0
from intcode_computer import Computer


with open("AoC-2019-input-13.txt") as f:
    data = [int(x) for x in f.read().strip().split(',')]

computer = Computer(data, pause_on_output=3)

blocks = set()
while not computer.on_fire:
    result = computer.run_program([])
    if result:
        blocks.add(tuple(result))

block_count = 0

for block in blocks:
    if block[2] == 2:
        block_count += 1

print(blocks)

print(block_count)
示例#7
0
def do(program, input_values=[]):
    computer = Computer(program, debug=False)
    computer.run_program(input_values)
    return computer.output
示例#8
0
        r.lpush(input_keyname, ship[(x, y)])
        # print(f"Telling the computer the current color is {ship[(x, y)]}")

        # get instructions back from the computer.
        color = r.brpop(output_keyname)[1]
        newdir = r.brpop(output_keyname)[1]

        ship[(x, y)] = color

        if newdir == b"0":
            newdir = -1
        else:
            newdir = 1

        direction += newdir
        direction %= 4
        x, y = x + directions[direction][0], y + directions[direction][1]


c1 = Computer(init_args=[], input_topic="input", output_topic="output")

t1 = threading.Thread(target=c1.computer)
t2 = threading.Thread(target=handle_computer, daemon=True)

t1.start()
t2.start()

t1.join()

print(f"Part 1: {len(ship)}")
示例#9
0
 def __init__(self, data, starting_panel):
     self.brain = Computer(data, starting_panel, pause_on_output=2)
     self.direction = 0
     self.pos = Point(0, 0)
     self.move_history = [self.pos]
     self.painted = dict()
示例#10
0
def init_computer():
    with open("AoC-2019-input-15.txt") as infile:
        program = [int(x) for x in infile.read().strip().split(',')]
    return Computer(program, pause_on_output=1)
示例#11
0
def run_amplifiers(program, settings, input_signal=0):
    for setting in settings:
        computer = Computer(program, setting, pause_on_output=1)
        output_value = computer.run_program([input_signal])
        input_signal = output_value
    return output_value