002: 先立つもの¶
難易度: ☆
問題¶
関数 free_slots(events, day_start, day_end) を書いてください。
この関数は、1日の予定一覧 events と、調べる時間帯 day_start、day_end を受け取り、空き時間の一覧を返します。
時刻はすべて "HH:MM" 形式の文字列です。
events の各要素は (start, end) のタプルです。
戻り値は (start, end, minutes) のタプルのリストにしてください。
予定は入力時点で並んでいるとは限りません。
開始時刻の早い順に処理し、予定が重なっている場合は ValueError を送出してください。
制約¶
eventsの予定はday_start以上、day_end以下の範囲にあります。- 各予定では、開始時刻は終了時刻より前です。
- 日付をまたぐ予定は扱いません。
- 入力の形式チェックはしません。
例¶
>>> events = [("13:00", "14:00"), ("09:30", "10:15"), ("11:00", "12:00")]
>>> free_slots(events, "09:00", "15:00")
[('09:00', '09:30', 30), ('10:15', '11:00', 45), ('12:00', '13:00', 60), ('14:00', '15:00', 60)]
>>> free_slots([], "09:00", "10:00")
[('09:00', '10:00', 60)]
>>> free_slots([("09:00", "10:00"), ("09:30", "11:00")], "09:00", "12:00")
Traceback (most recent call last):
...
ValueError: events overlap
発展¶
day_start より前に始まる予定や、day_end より後に終わる予定を、調べる時間帯の端で切り詰める版を書いてください。