В ряду замеров потерялся один большой перерыв, потому что проверка брала пары через одну
Учебный отчёт получает отсортированные отметки времени: 0, 5, 20 и 24 минуты. Нужно найти паузы между соседними замерами. Если взять элементы по два без перекрытия, получатся пары 0–5 и 20–24. Важный промежуток между 5 и 20 окажется между парами, поэтому отчёт его пропустит.
from itertools import pairwise
minutes = [0, 5, 20, 24]
gaps = [(start, end, end - start) for start, end in pairwise(minutes)]
assert gaps == [(0, 5, 5), (5, 20, 15), (20, 24, 4)]
assert [g for g in gaps if g[2] > 10] == [(5, 20, 15)]
assert list(pairwise([0])) == []
Каждый элемент, кроме крайних, участвует в двух соседних парах. Так работает pairwise. Если в исходном ряду всего один замер, промежутков нет. Пустой список пауз в этом случае стоит показывать вместе с количеством замеров, чтобы читатель отличал отсутствие перерыва от недостатка данных.
Порядок входа тоже часть договора. Для отметок времени проверь, действительно ли они идут по возрастанию. Если одинаковые отметки допустимы, разница ноль может быть нормальным результатом. Если порядок нарушен, отрицательный промежуток стоит рассматривать отдельно. Автоматическая сортировка удобна для отчёта по времени, но может скрыть проблему с последовательностью, в которой система получила события.
В тесте оставь большой перерыв именно между предполагаемыми группами, а не в начале или в конце. Добавь пустой ряд и единственный замер. Такие примеры проверяют и сам обход, и подпись, которую читатель увидит рядом с итогом.
Другие проверки отчётов — в личном Telegram.
Данные учебные; текст подготовлен с помощью ИИ.
