Esempio n. 1
0
def part2():
    """Solve challenge part 2."""
    intcode_vm = IntCodeVM(INPUT)
    for noun in range(100):
        for verb in range(100):
            if run_with_noun_and_verb(intcode_vm, noun, verb) == 19690720:
                return 100 * noun + verb
Esempio n. 2
0
def part1():
    """Solve challenge part 1."""
    intcode_vm = IntCodeVM(INPUT)
    screen = dict()
    while not intcode_vm.is_halted:
        point, tile_id = get_software_output(intcode_vm)
        screen[point] = tile_id
    return count_blocks(screen)
Esempio n. 3
0
def run_with_noun_and_verb(intcode_vm: IntCodeVM, noun: int, verb: int) -> int:
    """Reset given intcode VM, set noun and verb, run it and get value at memory index 0."""
    intcode_vm.reset()
    intcode_vm.mem_set(1, noun)
    intcode_vm.mem_set(2, verb)
    intcode_vm.run()
    return intcode_vm.mem_get(0)
Esempio n. 4
0
def part1():
    """Solve challenge part 1."""
    thrusters_signals = set()
    intcode_vm = IntCodeVM(INPUT)
    for perm in permutations(range(5)):
        signals = [0]
        for amp_id in range(5):
            intcode_vm.reset()
            intcode_vm.add_input(perm[amp_id], signals[-1])
            signals.append(intcode_vm.run())
        thrusters_signals.add(signals[-1])
    return max(thrusters_signals)
Esempio n. 5
0
def part2():
    """Solve challenge part 2."""
    thrusters_signals = set()
    for perm in permutations(range(5, 10)):
        amps = [IntCodeVM(INPUT, perm[amp_id]) for amp_id in range(5)]
        signals = [0]
        halt = False
        while not halt:
            for amp in amps:
                amp.add_input(signals[-1])
                out = amp.run(pause_on_output=True)
                if out is None and amp.is_halted:
                    halt = True
                    break
                signals.append(out)
        thrusters_signals.add(signals[-1])
    return max(thrusters_signals)
Esempio n. 6
0
def part2():
    """Solve challenge part 2."""
    intcode_vm = IntCodeVM(INPUT, 0)
    intcode_vm.mem_set(0, 2)
    screen = dict()
    score = 0
    while not intcode_vm.is_halted:
        # print_screen(screen)
        joystick = get_joystick_move(screen)
        intcode_vm.add_input(joystick, clear_inputs=True)
        point, tile_id = get_software_output(intcode_vm)
        if point == DISPLAY_SCORE:
            score = tile_id
        elif point.x is not None:
            screen[point] = tile_id
    return score
Esempio n. 7
0
def part2():
    """Solve challenge part 2."""
    return IntCodeVM(INPUT, 5).run()
Esempio n. 8
0
def part1():
    """Solve challenge part 1."""
    return IntCodeVM(INPUT, 1).run()
Esempio n. 9
0
def part1():
    """Solve challenge part 1."""
    return run_with_noun_and_verb(IntCodeVM(INPUT), 12, 2)
Esempio n. 10
0
def get_software_output(ic_vm: IntCodeVM) -> Tuple[Point, int]:
    """Run the software to get the 3 outputs (x, y, tile_id)."""
    return Point(
        ic_vm.run(pause_on_output=True),
        ic_vm.run(pause_on_output=True)), ic_vm.run(pause_on_output=True)