Расшифровать код
Есть задача.
На вход программе подается число n - количество временных промежутков. Затем идут сами временные промежутки вида 19.00 20.00 и так далее. Суть в том, чтобы узнать, покрывают ли данные временные промежутки время от 8 утра до 8 вечера полностью, если же нет - то сколько будет свободных промежутков.
Пример входных данных:
5
8.50 9.35
17.55 19.40
7.20 7.35
8.10 8.59
20.05 21.50
Пример выходных данных:
NO 3
Собственно есть код, но можете пожалуйста объяснить, что происходит в строчках 8-15 и 22-24, буду весьма благодарен.
n = int(input())
mtx = []
mintimeidx = 22222222222
maxtimeidx = -22222222222
for _ in range(n):
c_expr = [x.split('.') for x in input().split()]
times = [int(x[0])*60 + int(x[1]) for x in c_expr]
mtx.append(times)
mintimeidx = min(mintimeidx, times[0])
maxtimeidx = max(maxtimeidx, times[1])
pline = [0]*24*60
start_time = 8*60
end_time = 20*60 + 1
for I in mtx:
for K in range(max(I[0], start_time), min(I[1]+1, end_time)):
pline[K] = 1
ccont = -1
answ = 0
for I in range(start_time, end_time):
if (ccont != pline[I]):
ccont = pline[I]
if pline[I] == 0:
answ += 1
if answ == 0:
print('YES')
else:
print('NO', answ)
Ответы (1 шт):
похоже, что
сутки разбили на части по 1 минуте (60 * 24 минут)
дальше введенные интервалы разбивают на минуты и заполняют сутки из 1) - 1 - минута не входит в введенный интервал, 1 - минута входит в ведённый интервал
дальше подсчитывается сколько пустых (нулевых) минутных интервалов осталось
код можно было бы сделать таким:
# получить данные
time_ranges = [input().split() for _ in range(int(input()))]
day_minutes = [0] * (24 * 60)
# заполнить минутный интервал
for obj in time_ranges:
# распарсить начало и конец интервала
start = list(map(int, obj[0].split('.')))
finish = list(map(int, obj[1].split('.')))
# заполнить минутный интервал для заданного временного интервала
for minute in range(start[0] * 60 + start[1], finish[0] * 60 + finish[1] + 1):
if 0 <= minute < 24 * 60:
day_minutes[minute] = 1
# подсчитать пустые интервалы в интервале 8:00 - 20:00
old_minute = 1
count = 0
for index in range(8 * 60, 20 * 60 + 1):
minute = day_minutes[index]
if minute == 0 and old_minute == 1:
count += 1
old_minute = minute
# вывести результат
print(f"NO {count}" if count != 0 else "YES")