Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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)}
Ejemplo n.º 4
0
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)}