Пример #1
0
def run():
    print('part1 test', max(map(parse_bp, load_file('data/day05_test.txt'))))

    with timeitc():
        seat_list = sorted(map(parse_bp, load_file('data/day05.txt')))
    print('part1', seat_list[-1])
    print('part2', find_seat(seat_list))
Пример #2
0
def run():
    test_data = dict(parse_rules(load_file('data/day07_test.txt')))
    data = dict(parse_rules(load_file('data/day07.txt')))

    print('part1 test', len(find_bags(test_data, 'shiny gold')))
    print('part1', len(find_bags(data, 'shiny gold')))

    print('part2 test', count_bags(test_data, 'shiny gold'))
    print('part2', count_bags(data, 'shiny gold'))
Пример #3
0
def run():
    test_data = list(parse_cmds(load_file('data/day08_test.txt')))
    data = list(parse_cmds(load_file('data/day08.txt')))

    handle_run('part1 test', test_data)
    handle_run('part1', data)

    iterate_runs('part2 test', test_data)
    iterate_runs('part2', data)
Пример #4
0
def run():
    print(
        'part1 test',
        max(
            map(lambda v: calculate_seat(*v),
                map(parse_bp, load_file('data/day05_test.txt')))))

    seat_list = sorted(
        map(lambda v: calculate_seat(*v),
            map(parse_bp, load_file('data/day05.txt'))))
    print('part1', seat_list[-1])
    print('part2', find_seat(seat_list))
Пример #5
0
def run():
    test_data = load_file('data/day11_test.txt')
    data = load_file('data/day11.txt')

    result = iterate_grid(test_data, grid_next_1)
    print('part1 test', result.get('#', 0))

    result = iterate_grid(data, grid_next_1)
    print('part1', result.get('#', 0))

    result = iterate_grid(test_data, grid_next_2)
    print('part2 test', result.get('#', 0))

    result = iterate_grid(data, grid_next_2)
    print('part2', result.get('#', 0))
Пример #6
0
def parse_file(file_name):
    line_list = load_file(file_name)
    cmd_list = []
    for line in line_list:
        if line.startswith('mask = '):
            mask_str = line[7:]
            mask_val = 0
            one_val = 0
            zero_val = 0
            for c in mask_str:
                mask_val <<= 1
                one_val <<= 1
                zero_val <<= 1

                if c == 'X':
                    mask_val |= 1
                elif c == '1':
                    one_val |= 1
                elif c == '0':
                    zero_val |= 1

            cmd_list.append((mask_val, one_val, zero_val))

        else:
            match = re.match(r'^mem\[(?P<addr>\d+)\] = (?P<val>\d+)$', line)
            if match:
                match_lookup = match.groupdict()
                cmd_list.append((int(match_lookup['addr']), int(match_lookup['val'])))

    return cmd_list
Пример #7
0
def print_results_2(name, file_name):
    line_list = load_file(file_name)
    tile_grid = parse_input(line_list)
    map_solution = tile_grid.get_map_solutions(1)[0]
    map_image = unflipped_map_image = tile_grid.build_image(map_solution)
    flipped = False
    while True:
        found_list = find_monster(map_image)
        if found_list:
            found_count = len(found_list)
            pixel_count = get_pixel_count(''.join(map_image))
            monster_pixel_count = get_pixel_count(MONSTER_IMAGE) * found_count
            result = pixel_count - monster_pixel_count
            break

        if flipped:
            map_image = image_rotate_clockwise(unflipped_map_image)

        else:
            unflipped_map_image = map_image
            map_image = image_flip_vertically(map_image)

        flipped = not flipped

    print(f'{name} {result}')
Пример #8
0
def print_results_1(name, file_name):
    line_list = load_file(file_name)
    ingredient_list = parse_input(line_list)
    _, allergen_free = search_allergens(ingredient_list)
    ingredient_count = 0
    for ingredients, _ in ingredient_list:
        ingredient_count += len(ingredients & allergen_free)
    print(f'{name} {ingredient_count}')
Пример #9
0
def print_results_2(name, file_name):
    line_list = load_file(file_name)
    tile_dir_list = parse_input(line_list)
    coord_set = get_coord_set(tile_dir_list)
    for _ in range(100):
        coord_set = next_coord_set(coord_set)

    print(f'{name} {len(coord_set)}')
Пример #10
0
def print_results(name, file_name, modify=False):
    line_list = load_file(file_name)
    rule_lookup, message_list = parse_input(line_list, modify)
    result_list = [
        match_rule(rule_lookup, 0, message) == message
        for message in message_list
    ]
    result = sum(result_list)
    print(f'{name} {result}')
Пример #11
0
def parse_data(file_name):
    line_list = load_file(file_name)
    field_lookup = {}
    ticket_list = []
    for line in line_list:
        if match := re.match('^([^:]+): ([0-9]+)-([0-9]+) or ([0-9]+)-([0-9]+)', line):
            field_name, *field_values = match.groups()
            field_lookup[field_name] = [int(v) for v in field_values]

        elif line and line.find(':') == -1:
            ticket_list.append([int(v) for v in line.split(',')])
Пример #12
0
def parse_data(file_name, dimensions):
    line_list = load_file(file_name)
    cube_list = []
    for y, line in enumerate(line_list):
        for x, c in enumerate(line):
            if c == '#':
                v = [0] * dimensions
                v[0] = x
                v[1] = y
                cube_list.append(tuple(v))

    return tuple(cube_list)
Пример #13
0
def parse_file(file_name):
    return map(int, load_file(file_name))
Пример #14
0
def print_results_1(name, file_name):
    line_list = load_file(file_name)
    tile_grid = parse_input(line_list)
    print(f'{name} {prod(tile_grid.connection_count[2])}')
Пример #15
0
def print_results_1(name, file_name):
    line_list = load_file(file_name)
    tile_dir_list = parse_input(line_list)
    coord_set = get_coord_set(tile_dir_list)

    print(f'{name} {len(coord_set)}')
Пример #16
0
def parse_file(file_name):
    return sorted([int(adapter) for adapter in load_file(file_name)])
Пример #17
0
def parse_file(file_name):
    data = load_file(file_name)
    ts = int(data[0])
    bus_id_list = [(idx, int(val))
                   for idx, val in enumerate(data[1].split(',')) if val != 'x']
    return ts, bus_id_list
Пример #18
0
def print_results_2(name, file_name):
    line_list = load_file(file_name)
    ingredient_list = parse_input(line_list)
    allergen_lookup, _ = search_allergens(ingredient_list)
    allergen_list = [allergen_lookup[i] for i in sorted(allergen_lookup.keys())]
    print(f'{name} {",".join(allergen_list)}')
Пример #19
0
def print_results(name, file_name, play_func):
    line_list = load_file(file_name)
    player_deck_list = parse_input(line_list)
    play_func(player_deck_list)
    result_list = calculate_score(player_deck_list)
    print(f'{name} {sum(result_list)}')