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))
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'))
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)
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))
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))
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
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}')
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}')
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)}')
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}')
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(',')])
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)
def parse_file(file_name): return map(int, load_file(file_name))
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])}')
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)}')
def parse_file(file_name): return sorted([int(adapter) for adapter in load_file(file_name)])
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
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)}')
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)}')