Тестовое задание
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
3.5 KiB

"""Задание на расчет интервалов, и вычисление времени, которое ученик
и учитель присутствовали на уроке одновременно."""
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"]}'