Расшифровать код

Есть задача.

На вход программе подается число 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 шт):

Автор решения: Zhihar

похоже, что

  1. сутки разбили на части по 1 минуте (60 * 24 минут)

  2. дальше введенные интервалы разбивают на минуты и заполняют сутки из 1) - 1 - минута не входит в введенный интервал, 1 - минута входит в ведённый интервал

  3. дальше подсчитывается сколько пустых (нулевых) минутных интервалов осталось

код можно было бы сделать таким:

# получить данные
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")
→ Ссылка