Задача валидации отрезков времени
Вход:
Первая строка входных данных содержит количество наборов тестовых
данных. Затем следуют t наборов.Первая строка набора содержит n отрезков времени. В следующих n
строках следуют описания отрезков.
Условия:
- часы, минуты и секунды заданы корректно (то есть часы находятся в промежутке от 0 до 23, а минуты и секунды — в промежутке от 0 до 59);
- левая граница отрезка находится не позже его правой границы (но границы могут быть равны);
- никакая пара отрезков не пересекается(даже в граничных моментах времени).
Задача - Необходимо проверить входящие интервалы на данные условия. В случае, если все условия выполняются, то вывести 'YES', иначе вывести 'NO'.
Я написал следующий код:
from typing import List
def validate_intervals(intervals: List[List[str]]):
intervals_in_seconds = []
for interval in intervals:
start, end = interval.split("-")
start_hours, start_minutes, start_seconds = [int(x) for x in start.split(":")]
end_hours, end_minutes, end_seconds = [int(x) for x in end.split(":")]
if not (0 <= start_hours < 24 and 0 <= start_minutes < 60 and 0 <= start_seconds < 60)\
and not (0 <= end_hours < 24 and 0 <= end_minutes < 60 and 0 <= end_seconds < 60):
return "NO"
start_in_seconds = start_hours * 3600 + start_minutes * 60 + start_seconds
end_in_seconds = end_hours * 3600 + end_minutes * 60 + end_seconds
if start_in_seconds > end_in_seconds:
return "NO"
intervals_in_seconds.append((start_in_seconds, end_in_seconds))
intervals_in_seconds.sort(key=lambda x: x[0])
for i in range(1, len(intervals_in_seconds)):
if intervals_in_seconds[i-1][1] < intervals_in_seconds[i][0]:
return "NO"
return "YES"
def prepare_tests() -> List[List[int]]:
all_test_intervals = []
test_count = int(input())
for i in range(test_count):
intervals = []
intervals_amount = int(input())
for _ in range(intervals_amount):
interval = input()
intervals.append(interval)
all_test_intervals.append(intervals)
return all_test_intervals
if __name__ == '__main__':
tests = prepare_tests()
for t in tests:
print(validate_intervals(t))
input
6
1
02:46:00-03:14:59
2
23:59:59-23:59:59
00:00:00-23:59:58
2
23:59:58-23:59:59
00:00:00-23:59:58
2
23:59:59-23:59:58
00:00:00-23:59:57
6
17:53:39-20:20:02
10:39:17-11:00:52
08:42:47-09:02:14
09:44:26-10:21:41
00:46:17-02:07:19
22:42:50-23:17:46
1
24:00:00-23:59:59
output должен быть такой
YES
YES
NO
NO
YES
NO
но он такой
YES
NO
YES
NO
NO
NO
Источник: Stack Overflow на русском