Вам предоставляется список пар. Каждая пара хранит даты начала и окончания, представляющие временное окно. Задача состоит в том, чтобы проверить, есть ли какое-либо перекрытие.
Обратите внимание, что проблему можно решить тривиально, используя два вложенных цикла for для цикла periods
и несколько условий для проверки отсутствия перекрытий. Однако мне интересно посмотреть, есть ли более удобочитаемое и элегантное решение, которое поддерживает циклы и если операторы минимальны и которое не обязательно использует стандартную библиотеку.
Перекрытия не обязательно возникают между смежными записями.
Ожидается, что в списке periods
будет менее 10 временных окон. Я не беспокоюсь о времени процессора. Я обеспокоен читаемостью кода.
from datetime import datetime
overlapping_periods = [
[datetime(2019, 1, 1), datetime(2019, 1, 5)],
[datetime(2019, 1, 6), datetime(2019, 1, 10)],
[datetime(2019, 1, 9), datetime(2019, 1, 15)],
]
non_overlapping_periods = [
[datetime(2019, 1, 1), datetime(2019, 1, 5)],
[datetime(2019, 1, 6), datetime(2019, 1, 10)],
[datetime(2019, 1, 11), datetime(2019, 1, 15)],
]
# Find an elegant `verify_overlaps`.
verify_overlaps(overlapping_periods) # True
verify_overlaps(non_overlapping_periods) # False