with open("day5/input.txt") as file: data = file.readlines() safeFood = [] maybeRotten = [] for index, item in enumerate(data): if(item == "\n"): print(f"At index {index} is space") safeFood = [value.strip("\n") for value in data[:index]] maybeRotten = [int(value.strip("\n")) for value in data[index+1:]] safeRanges = [] for safeRange in safeFood: safeRanges.append([int(number) for number in safeRange.split("-")]) safeFoodNumber = 0 for item in maybeRotten: for ranges in safeRanges: if((ranges[0] <= item) and (item <= ranges[1])): safeFoodNumber+=1 break # merge intervals and count unique IDs without allocating every ID merged = [] for start, end in sorted(safeRanges, key=lambda r: r[0]): if not merged or start > merged[-1][1] + 1: merged.append([start, end]) else: merged[-1][1] = max(merged[-1][1], end) total_covered = sum(end - start + 1 for start, end in merged) #print(total_covered) # if you need the compact intervals for lookups later: safeRanges = merged #print(safeRanges) #print(maybeRotten) print(f"Part 1: {safeFoodNumber}\n\rPart 2: {total_covered}")