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
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)
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)
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)
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)
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
def part2(): """Solve challenge part 2.""" return IntCodeVM(INPUT, 5).run()
def part1(): """Solve challenge part 1.""" return IntCodeVM(INPUT, 1).run()
def part1(): """Solve challenge part 1.""" return run_with_noun_and_verb(IntCodeVM(INPUT), 12, 2)
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)