Browse Source

Проходит тесты, работает. Нужен рефакторинг

master
Дмитрий 3 years ago
parent
commit
7202f01dc3
  1. 60
      task_3.py

60
task_3.py

@ -108,6 +108,54 @@ def absorb_small_included_intervals(intervals: list) -> list:
return result
def extend_partial_included_intervals(interval_A, interval_B) -> list:
"""Если интервалы пересекаются, то мы заменяем их на сумму
перескающихся интервалов."""
# планирую поступать по тому же принципу что и выше: добавлять
# сумму в исходный список, итого получим список с пересечениями,
# который потом можно прогнать через поглатитель меньших
# интервалов
# если один из интервалов пустой, то пересечение будет пустым
if not interval_A or not interval_B:
return []
# если какой-то из инетрвалов имеет нулевую длину (начало=конец),
# то пересечение пустое
if interval_A[0] == interval_A[1] or interval_B[0] == interval_B[1]:
return []
# нужно проверить, что интервалы вообще пересекаются
# А и B не пересекаются, если
# начало А > конец B, или если начало B > конец А
if interval_A[0] > interval_B[1] or interval_B[0] > interval_A[1]:
return []
# сумма интервалов: наименьшее начало из А и Б, и наибольший конец
interval_begin = min(interval_A[0], interval_B[0])
interval_end = max(interval_A[1], interval_B[1])
print(f"get: {[interval_A, interval_B]}")
print(f"res: {[interval_begin, interval_end]}")
return [interval_begin, interval_end]
def extend_intervals(intervals) -> list:
extended_intervals = [
extend_partial_included_intervals(interval, intervals[k])
for i, interval in enumerate(intervals)
for k in range(i + 1, len(intervals))
if extend_partial_included_intervals(interval, intervals[k])
]
print(f"{extended_intervals=}")
uniq_extended_intervals = [i for i in extended_intervals if i not in intervals]
print(f"{uniq_extended_intervals=}")
result = intervals + uniq_extended_intervals
result = absorb_small_included_intervals(result)
return result
def find_inner_sum_of_intersections(interval_A, interval_B) -> list:
print(f"{interval_A=}")
print(f"{interval_B=}")
@ -202,17 +250,7 @@ def appearance(intervals):
intervals["pupil"][i : i + 2] for i in range(0, len(intervals["pupil"]), 2)
]
pupil_summs = []
for i in range(len(pupil)):
for k in range(i, len(pupil)):
a = find_inner_sum_of_intersections(pupil[i], pupil[k])
pupil_summs.append(a)
pupil_summs = [p for p in pupil_summs if p]
print(f"{pupil_summs=}")
pupil.extend(pupil_summs)
pupil = enlarge_elapsed_intervals(pupil)
pupil = extend_intervals(pupil)
print(f"!!!{pupil=}")

Loading…
Cancel
Save