Untitled

 avatar
unknown
plain_text
a year ago
1.8 kB
1
Indexable
busy = [{   'start': '10:30',
            'stop': '10:50'},
            {'start': '18:40',
            'stop': '18:50'},
            {'start': '14:40',
            'stop' : '15:50'},
            {'start': '16:40',
            'stop': '17:20'},
            {'start': '20:05',
            'stop': '20:20'}
]

#Время начала и конца рабочего дня в часах
start = 9
finish = 21

#Переводим в минуты, общему знаменателю для дальнейших вычислений
start *= 60
finish *= 60

for time_pice in busy:
    for key in time_pice:
        #Переводим время в целое число минут
        time_pice[key] = list(map(int, time_pice[key].split(":")))
        time_pice[key] = time_pice[key][0]*60 + time_pice[key][1]

#Сортируем список дел по времени начала дела
busy = [value for value in sorted(busy, key=lambda item: item['start'])]



#Допустим завершение рабочего дня - последнее дело в рабочем дне
busy.append({   'start': finish,
                'stop': finish})
#Для того чтобы следующий цикл разбил на промежутки период от последнего дела, до конца рабочего дня

def minuts_to_hmm(minuts):
    return f"{minuts//60}:{0 if minuts%60 < 10 else ''}{minuts%60}"

free = []
for time_pice in busy:
    for i in range((time_pice['start'] - start)//30):
        free.append({'start': minuts_to_hmm(start + i * 30),
                     'stop': minuts_to_hmm(start + (i + 1) * 30)})
    start = time_pice['stop']


for time_window in free:
    print(time_window)

print(len(free))
Leave a Comment