def class_search_schedule(dep, num, schedule): """ given a course, this goes over the given schedule and see which ones fit """ terms = {'01':'F', '02':'W', '03':'Sp', '04':'Su'} term = terms[schedule.current_term[-2:]] + schedule.current_term[2:4] # get list of courses that is the specified course...i hope that makes sense search_results = class_search(dep, num, term) if not search_results: return None available_classes = [] # go over every course in the search list and check if it fits in schedule for result in search_results: flag = False if result['available'] <= '0': #print "full class" continue result_days = result['days'] result_times = result['times'] # check for conflict against current schedule for current_class in schedule.current_classes: curr_days = current_class['days'] curr_time = current_class['time'] # first check conflict in the day if(set(result_days).intersection(curr_days)): # then check the specific time if time_conflict(result_times, curr_time): #print ('-').join(result_times) + " conflicts with " + ('-').join(curr_time) flag = True #else: #print ('-').join(result_times) + " does not conflict with " + ('-').join(curr_time) if not flag: available_classes.append(result) return available_classes
def class_search_schedule(dep, num, schedule): """ given a course, this goes over the given schedule and see which ones fit """ terms = {'01': 'F', '02': 'W', '03': 'Sp', '04': 'Su'} term = terms[schedule.current_term[-2:]] + schedule.current_term[2:4] # get list of courses that is the specified course...i hope that makes sense search_results = class_search(dep, num, term) if not search_results: return None available_classes = [] # go over every course in the search list and check if it fits in schedule for result in search_results: flag = False if result['available'] <= '0': #print "full class" continue result_days = result['days'] result_times = result['times'] # check for conflict against current schedule for current_class in schedule.current_classes: curr_days = current_class['days'] curr_time = current_class['time'] # first check conflict in the day if (set(result_days).intersection(curr_days)): # then check the specific time if time_conflict(result_times, curr_time): #print ('-').join(result_times) + " conflicts with " + ('-').join(curr_time) flag = True #else: #print ('-').join(result_times) + " does not conflict with " + ('-').join(curr_time) if not flag: available_classes.append(result) return available_classes
def make_schedule(list_of_classes, term, schedule): """ given a list of classes, returns all possible schedule combinations such that there are no conflicts. brute force """ class_types = ['Lecture', 'WWW'] lab_types = ['Recitation', 'Laboratory'] if term == '': adjusted_term = adjust_schedule_term(schedule.current_term) terms = {'00':'F', '01':'W', '02':'Sp', '03':'Su'} term = terms[adjusted_term[-2:]] + adjusted_term[2:4] class_search_results = [] for each_class in list_of_classes: each_class = format_course(each_class) # separate courses and get each course's info class_array = each_class.split(' ') result_set = class_search(class_array[0], class_array[1], term) if type(result_set) is not str: new_set = [] rec_lab = [] if result_set is None: continue for index, result in enumerate(result_set): if result['type'] in lab_types and result['available'] > 0: rec_lab.append(result) if result['type'] not in class_types: continue elif not result['available'] > '0': continue new_set.append(result) if len(rec_lab) > 0: class_search_results.append(rec_lab) class_search_results.append(new_set) class_set = [] combinations = [] permutations = [] for index, course_set in enumerate(class_search_results): new_permutations = [] for course in course_set: # Populate our basic permutation if index == 0: permutations.append([course]) else: for permutation in permutations: if permutation: new_permutation = list(permutation) new_permutation.append(course) new_permutations.append(new_permutation) if index != 0: permutations = list(new_permutations) new_permutations = [] for index, permutation in enumerate(permutations): if index == 0: continue for inner_index, course in enumerate(permutation): for second_inner_index, each_course in enumerate(permutation): if second_inner_index != inner_index: if class_search_conflict(course, permutation[second_inner_index]): permutation.remove(permutation[second_inner_index]) return {"combinations" : permutations, "classes_possible" : len(class_search_results)}
def make_schedule(list_of_classes, term, schedule): """ given a list of classes, returns all possible schedule combinations such that there are no conflicts. brute force """ class_types = ["Lecture", "WWW"] lab_types = ["Recitation", "Laboratory"] if term == "": adjusted_term = adjust_schedule_term(schedule.current_term) terms = {"00": "F", "01": "W", "02": "Sp", "03": "Su"} term = terms[adjusted_term[-2:]] + adjusted_term[2:4] class_search_results = [] for each_class in list_of_classes: each_class = format_course(each_class) # separate courses and get each course's info class_array = each_class.split(" ") result_set = class_search(class_array[0], class_array[1], term) if type(result_set) is not str: new_set = [] rec_lab = [] if result_set is None: continue for index, result in enumerate(result_set): if result["type"] in lab_types and result["available"] > 0: rec_lab.append(result) if result["type"] not in class_types: continue elif not result["available"] > "0": continue new_set.append(result) if len(rec_lab) > 0: class_search_results.append(rec_lab) class_search_results.append(new_set) class_set = [] combinations = [] permutations = [] for index, course_set in enumerate(class_search_results): new_permutations = [] for course in course_set: # Populate our basic permutation if index == 0: permutations.append([course]) else: for permutation in permutations: if permutation: new_permutation = list(permutation) new_permutation.append(course) new_permutations.append(new_permutation) if index != 0: permutations = list(new_permutations) new_permutations = [] for index, permutation in enumerate(permutations): if index == 0: continue for inner_index, course in enumerate(permutation): for second_inner_index, each_course in enumerate(permutation): if second_inner_index != inner_index: if class_search_conflict(course, permutation[second_inner_index]): permutation.remove(permutation[second_inner_index]) return {"combinations": permutations, "classes_possible": len(class_search_results)}