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.
105 lines
3.5 KiB
105 lines
3.5 KiB
3 years ago
|
"""Задание на расчет интервалов, и вычисление времени, которое ученик
|
||
3 years ago
|
и учитель присутствовали на уроке одновременно."""
|
||
3 years ago
|
from intervals_cleaning import normilize_intervals
|
||
3 years ago
|
from intervals_intersection import get_all_intersections
|
||
3 years ago
|
|
||
3 years ago
|
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,
|
||
|
},
|
||
|
]
|
||
|
|
||
|
|
||
3 years ago
|
def appearance(intervals) -> int:
|
||
3 years ago
|
"""Возвращает время одновременного присутствия ученика и учителя на
|
||
3 years ago
|
уроке в секундах."""
|
||
3 years ago
|
lesson = intervals["lesson"]
|
||
3 years ago
|
pupil = normilize_intervals(intervals["pupil"])
|
||
|
tutor = normilize_intervals(intervals["tutor"])
|
||
3 years ago
|
|
||
|
# получаем все интервалы студента на уроке
|
||
3 years ago
|
pupil_on_lesson = get_all_intersections(pupil, [lesson])
|
||
3 years ago
|
|
||
|
# по очереди сравниваем каждый из интервалов преподавателя с
|
||
|
# каждым из интервалов пересечения студента на уроке
|
||
3 years ago
|
tutor_on_pupil = get_all_intersections(pupil_on_lesson, tutor)
|
||
3 years ago
|
|
||
3 years ago
|
# на данном этапе мы уже имеем интересующие нас интервалы
|
||
|
# (пересечение ученик-учитель-урок); остается узнать
|
||
|
# продолжительность каждого из этих интервалов в секундах и
|
||
|
# сложить их.
|
||
3 years ago
|
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"]}'
|