"""Задание на расчет интервалов, и вычисление времени, которое ученик и учитель присутствовали на уроке одновременно.""" from intervals_cleaning import normilize_intervals from intervals_intersection import get_all_intersections tests = [ { "data": { "lesson": [1594663200, 1594666800], "pupil": [ 1594663340, 1594663389, 1594663390, 1594663395, 1594663396, 1594666472, ], "tutor": [1594663290, 1594663430, 1594663443, 1594666473], }, "answer": 3117, }, { "data": { "lesson": [1594702800, 1594706400], "pupil": [ 1594702789, 1594704500, 1594702807, 1594704542, 1594704512, 1594704513, 1594704564, 1594705150, 1594704581, 1594704582, 1594704734, 1594705009, 1594705095, 1594705096, 1594705106, 1594706480, 1594705158, 1594705773, 1594705849, 1594706480, 1594706500, 1594706875, 1594706502, 1594706503, 1594706524, 1594706524, 1594706579, 1594706641, ], "tutor": [ 1594700035, 1594700364, 1594702749, 1594705148, 1594705149, 1594706463, ], }, "answer": 3577, }, { "data": { "lesson": [1594692000, 1594695600], "pupil": [1594692033, 1594696347], "tutor": [1594692017, 1594692066, 1594692068, 1594696341], }, "answer": 3565, }, ] def appearance(intervals) -> int: """Возвращает время одновременного присутствия ученика и учителя на уроке в секундах.""" lesson = intervals["lesson"] pupil = normilize_intervals(intervals["pupil"]) tutor = normilize_intervals(intervals["tutor"]) # получаем все интервалы студента на уроке pupil_on_lesson = get_all_intersections(pupil, [lesson]) # по очереди сравниваем каждый из интервалов преподавателя с # каждым из интервалов пересечения студента на уроке tutor_on_pupil = get_all_intersections(pupil_on_lesson, tutor) # на данном этапе мы уже имеем интересующие нас интервалы # (пересечение ученик-учитель-урок); остается узнать # продолжительность каждого из этих интервалов в секундах и # сложить их. answer = sum([intr[1] - intr[0] for intr in tutor_on_pupil if intr]) return answer if __name__ == "__main__": for i, test in enumerate(tests): test_answer = appearance(test["data"]) assert ( test_answer == test["answer"] ), f'Error on test case {i}, got {test_answer}, expected {test["answer"]}'