range_list: list[list[str]] = [['1','5'],['7','8']] items_list: list[int] = [1,2,3,6,16] valid_id: list[int] = [] final_range: list[list[int]] = [[0,0]] range_new_dict: dict[int,int] = {} result: int = 0 input = """3-6 1-10 2-2 5-5 10-14 16-20 12-18 1 5 8 11 17 32""" # input = """515109478873629-517495683097941 # 55910578479451-59894189259887 # 388889831860114-389361546156805 # 426667061525753-431247335780190 # 163539375204061 # 531903863069312 # 34101977519160 # 164401920447043 # 5765415079155 # 235541805889895 # 241438782449974 # 228538610394597 # 557824039518207""" with open("input.txt", "r") as file: input = file.read() range_list = list(map(list, [row.split("-") for row in input.split("\n\n")[0].strip().split("\n")])) items_list = list(map(int, input.split("\n\n")[1].strip().split("\n"))) print("="*100) print("range_list",len(range_list)) print("="*100) # получаем все возможные не "протухшие" id продуктов # for index,i in enumerate(items_list): # for element in range_list: # if i >= int(element[0]) and i <= int(element[1]): # valid_id.append(i) low_list, high_list = [], [] for item in range_list: low_list.append(int(item[0])) high_list.append(int(item[1])) print("="*100) print("high_list",len(high_list)) for i in high_list: print(i) print("="*100) for low,high in zip(low_list, high_list): range_new_dict[int(high)] = int(low) print("="*100) print("range_new_dict",len(range_new_dict)) for key, value in range_new_dict.items(): print(f"{key}: {value}") print("="*100) high_list = sorted(high_list, reverse=True) final_range = [[range_new_dict[high_list[0]],high_list[0]]] print("BEGIN") # print(f"{str(final_range[-1])}") for d in high_list[1:]: # print("Обрабатываем пару\n",range_new_dict[d],d) if final_range[-1][0] <= d <= final_range[-1][1] and range_new_dict[d] <= final_range[-1][0]: # print(f"УСЛОВИЕ\n{str(final_range[-1][0])} <= {d} <= {str(final_range[-1][1])} and {str(range_new_dict[d])} <= {str(final_range[-1][0])}") final_range[-1][0]= range_new_dict[d] final_range[-1][1]= final_range[-1][1] # print(f"Изменили последний в списке\n{str(final_range[-1])}") elif final_range[-1][0] > d < final_range[-1][1] and range_new_dict[d] < final_range[-1][0]: # print(f"УСЛОВИЕ\n{str(final_range[-1][0])} > {d} < {str(final_range[-1][1])} and {str(range_new_dict[d])} < {str(final_range[-1][0])}") final_range.append([range_new_dict[d],d]) # print(f"Добавили новы элемент в список\n{str(final_range[-1])}") elif final_range[-1][0] < d < final_range[-1][1] and range_new_dict[d] > final_range[-1][0]: # print(f"УСЛОВИЕ\n{str(final_range[-1][0])} < {d} < {str(final_range[-1][1])} and {str(range_new_dict[d])} > {str(final_range[-1][0])}") # print(f"Проигнорировали\n{str(final_range[-1])}") pass else: # print(f"УСЛОВИЕ\n{str(final_range[-1][0])} ? {d} ? {str(final_range[-1][1])} and {str(range_new_dict[d])} ? {str(final_range[-1][0])}") # print("НЕ поймади!!!!!!!!!!!!\n",range_new_dict[d],d,"\n",str(final_range[-1])) pass # print("="*100) # print(final_range) # print("="*100) for item in final_range: # print(item[1] - item[0] + 1) result += item[1] - item[0] + 1 print("final_range",len(final_range)) print("range_new_dict",len(range_new_dict)) print("result",result) # print("Всего найденно",len(set(valid_id)))