コンテンツにスキップ

002: 先立つもの

ヒント / 解答

難易度:

問題

関数 free_slots(events, day_start, day_end) を書いてください。 この関数は、1日の予定一覧 events と、調べる時間帯 day_startday_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 より後に終わる予定を、調べる時間帯の端で切り詰める版を書いてください。