from lib import get_data data = get_data(__file__) ranges, ids = data.split("\n\n") ids = tuple(map(int, ids.splitlines())) ranges = [list(map(int, line.split("-"))) for line in ranges.splitlines()] updated = True while updated: updated = False sorted_ranges = [] for lo, up in ranges: assert lo <= up for i in range(len(sorted_ranges)): slo, sup = sorted_ranges[i] if up + 1 < slo: sorted_ranges.insert(i, (lo, up)) elif lo < slo: sorted_ranges[i] = (lo, max(up, sup)) updated = True elif lo <= sup: sorted_ranges[i] = (slo, max(up, sup)) updated = True else: continue break else: sorted_ranges.append((lo, up)) ranges = sorted_ranges result_part_1 = 0 for id_to_check in ids: for lo, up in ranges: if lo <= id_to_check <= up: result_part_1 += 1 break print(result_part_1) result_part_2 = 0 for lo, up in ranges: result_part_2 += up - lo + 1 print(result_part_2) assert result_part_2 == 350780324308385