예제 #1
0
def main():
    input_queue = Queue()
    output_queue = Queue()

    program = IntcodeProgram(io_scheme=IntcodeProgram.IOScheme.QUEUE,
                             input_queue=input_queue,
                             output_queue=output_queue)
    program.initialize_memory_from_file('input.txt')
    arcade_data = program.dump_memory()

    program.run_to_end()

    tiles = defaultdict(int)

    while True:
        try:
            x = program.get_output(block=False)
            y = program.get_output(block=False)
            tile = Tile(program.get_output(block=False))
            tiles[tile] += 1
        except Empty:
            break

    print(f'Block Count: {tiles[Tile.BLOCK]}')

    program.load_memory(arcade_data)
    program.set_memory_address(0, 2)

    tiles = {}

    while True:
        try:
            program.execute_next()

        except WaitingForInput:
            process_frame(program, tiles)

            # draw_screen(tiles)

            paddle = get_paddle_x(tiles)
            ball = get_ball_x(tiles)

            if paddle > ball:
                program.queue_input(-1)
            elif paddle < ball:
                program.queue_input(1)
            else:
                program.queue_input(0)

        except ProgramHalted:
            print('Program Complete')
            process_frame(program, tiles)
            break

    draw_screen(tiles)
    print(f'Final Score: {tiles[(-1, 0)]}')
예제 #2
0
def main():
    input_queue = Queue()
    output_queue = Queue()
    program = IntcodeProgram(io_scheme=IntcodeProgram.IOScheme.QUEUE,
                             input_queue=input_queue,
                             output_queue=output_queue)
    program.initialize_memory_from_file('input.txt')
    memory_dump = program.dump_memory()

    survey_hull(program, memory_dump)
    survey_hull(program, memory_dump, run=True)
예제 #3
0
def main():
    input_queue = Queue()
    output_queue = Queue()
    program = IntcodeProgram(io_scheme=IntcodeProgram.IOScheme.QUEUE,
                             input_queue=input_queue,
                             output_queue=output_queue)
    program.initialize_memory_from_file('input.txt')
    memory_dump = program.dump_memory()

    left_edge_coordinates, right_edge_coordinates = part_one(
        program, memory_dump)
    part_two(program, memory_dump, left_edge_coordinates,
             right_edge_coordinates)
예제 #4
0
def main():
    input_queue = Queue()
    output_queue = Queue()
    program = IntcodeProgram(io_scheme=IntcodeProgram.IOScheme.QUEUE,
                             input_queue=input_queue,
                             output_queue=output_queue)
    program.initialize_memory_from_file('input.txt')
    memory_dump = program.dump_memory()
    program.run_to_end()

    scaffolding = build_scaffolding(program)

    alignment_parameters = []

    for scaffold in scaffolding:
        if scaffolding.issuperset(scaffold.get_neighbors()):
            alignment_parameters.append(scaffold.x * scaffold.y)

    print(f'Part One: {sum(alignment_parameters)}')

    program.load_memory(memory_dump)
    program.set_memory_address(0, 2)

    drive_around(program)