|
|
|
@ -95,24 +95,28 @@ def find_intersection(interval_A, interval_B) -> list:
|
|
|
|
|
def enlarge_elapsed_intervals(intervals): |
|
|
|
|
# ключ - начало, значние - конец. Если по ключу "начало" уже есть |
|
|
|
|
# значение, то сохраняем max(существующее, новое) |
|
|
|
|
beginnings = {interval[0]: interval[1] for interval in intervals} |
|
|
|
|
endings = {interval[1]: interval[0] for interval in intervals} |
|
|
|
|
|
|
|
|
|
# чистка конечных интервалов. ключ в словаре - начало интервала. |
|
|
|
|
# проходим по исходному списку и выбираем наибольшее конечное |
|
|
|
|
# значение (самый поздний) из интервалов с одинаковыми началами |
|
|
|
|
beginnings = {interval[0]: interval[1] for interval in intervals} |
|
|
|
|
for interval in intervals: |
|
|
|
|
begin = interval[0] |
|
|
|
|
end = interval[1] |
|
|
|
|
|
|
|
|
|
beginnings[begin] = max(beginnings[begin], end) |
|
|
|
|
endings[end] = min(endings[end], begin) |
|
|
|
|
|
|
|
|
|
print(f"{beginnings=}") |
|
|
|
|
|
|
|
|
|
endings = {beginnings[k]: k for k in beginnings} |
|
|
|
|
for interval in intervals: |
|
|
|
|
begin = interval[0] |
|
|
|
|
end = interval[1] |
|
|
|
|
if endings.get(end): |
|
|
|
|
endings[end] = min(endings[end], begin) |
|
|
|
|
|
|
|
|
|
print(f"{endings=}") |
|
|
|
|
beginnings_list = list(beginnings.values()) |
|
|
|
|
endings_lsit = list(endings.values()) |
|
|
|
|
test = [ |
|
|
|
|
[endings_lsit[i], beginnings_list[i]] for i in range(len(beginnings_list) - 1) |
|
|
|
|
] |
|
|
|
|
return test |
|
|
|
|
result = [[endings[k], k] for k in endings] |
|
|
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def appearance(intervals): |
|
|
|
|