入力データがどのように見えるかは明確ではないため、いくつかの仮定を立てます。
最初に、週ごとの個別の教育期間のセットが['Monday 9am-10am', 'Monday 10am-11am', ...]
あり、すべてのクラス スケジュールがこれらの教育期間のサブセットで構成されていると仮定します。
次に、各期間のセットが 1 学期全体 (部分的な学期ではありません) であり、一度に 1 学期のコースを検討していると仮定します。
第 3 に、すべてのクラスが別個のものであると仮定します。MATH101 と ARTMATH101 が同じ部屋と教授を共有することはできません。教師が 1 つのコースを教えている場合、(法的に) 同時に別のコースを教えることはできません。つまり、「一度に 1 つのクラスしか教えられない」という規則に例外はありません。
class Professor(object):
def __init__(self, name, id):
self.name = name
self.id = id
class Course(object):
def __init__(self, professor_ids, periods):
self.professors = set(professor_ids)
self.periods = periods # where 'period' is an enum of all teaching periods in a week
from collections import Counter
def is_professor_double_booked(professor, all_courses):
# find all courses taught by this professor
pcourses = [course in all_courses if professor.id in course.professor_ids]
# count how many times each period is booked
period_bookings = Counter(p for course in pcourses for p in course.periods)
# return (any period booked twice?)
return len(period_bookings) and (period_bookings.most_common()[0][1] > 1)
def professors_who_are_double_booked(professors, courses):
for prof in professors:
if is_professor_double_booked(prof, courses):
print(prof.name)