Различные временные интервалы из нескольких пересекающихся интервалов

У меня есть следующие временные интервалы в течение одного дня:

1) с 9:00 до 13: 00

2) с 9: 30 до 10: 30

3) с 9: 30 до 10:30 (этот интервал намеренно здесь 2x)

4) с 11: 00 до 12: 00

Я могу визуализировать временные интервалы на горизонтальной временной линии:

Временной интервал 1)

 |--------------------------------------------|

 9:00                                       13:00

Временной интервал 2)

      |-------------|

      9:30      10:30

Временной интервал 3)

      |-------------|

      9:30      10:30

Временной интервал 4)

                           |-------------|

                           11:00      12:00

Я пытаюсь понять метод Python, который займет N временных интервалов на входе и вернет различные временные окна плюс сколько раз окно перекрывает другое. В приведенном выше примере ожидаемый результат должен выглядеть следующим образом:

Окно 1: 9:00 — 9:30, Количество слотов 1

Окно 2: 9:30 — 10:30, Количество слотов 3

Окно 3: 10:30 — 11:00, Количество слотов 1

Окно 4: 11:00 — 12:00, Количество слотов 2

Окно 5: 12:00 — 13:00, Количество слотов 1

Кто-нибудь может указать мне правильное направление, как решить эту проблему в Python 3?

1 ответ

  1. Используйте средства в наборах sympy: intervals, чтобы сделать манипулирование интервалами более удобным. Это первая часть.

    Выполните вычисление рекурсивно. Начните с любого из заданных интервалов, начните с него как с «первого перекрестка» и «вниз» на один шаг. Выберите другой интервал и вычислите пересечение с ним предыдущего пересечения. Если это пересечение непусто, перейдите «вниз» еще на один шаг. В противном случае Вернитесь наверх с этим пересечением в качестве значения пересечений рассматриваемых интервалов. Аналогично, если пройденный перекресток пуст, идите «вверх» и возвращайтесь оттуда. Начните с каждого из заданных интервалов.