reformat v3 step 2clear

This commit is contained in:
SowinskiBraeden committed 2022-04-07 13:53:01 -07:00
1 parent 38cd356efb
commit c500ceff44
3 files changed
+62 -11640

No files matched your search

+1 -11613
View File
File diff suppressed because it is too large. Load diff
+2
View File
@@ -1,3 +1,5 @@
test_string = "XAT--12C-S" test_string = "XAT--12C-S"
print(bool([i for i in ["XAT--12A-S", "XAT--12B-S"] if(i in test_string)])) print(bool([i for i in ["XAT--12A-S", "XAT--12B-S"] if(i in test_string)]))
print(test_string[len(test_string)-1])
+59 -27
View File
@@ -2,6 +2,7 @@
import sys import sys
import json import json
import math import math
import random
from courses import mockCourses, activeCourses from courses import mockCourses, activeCourses
from mockStudents import generateMockStudents, getSampleStudents from mockStudents import generateMockStudents, getSampleStudents
from generateCourses import getSampleCourses from generateCourses import getSampleCourses
@@ -370,6 +371,7 @@ def generateScheduleV3(students, courses):
activeCourses[code] = courses[code] activeCourses[code] = courses[code]
# Step 2 - Generate class list without timetable # Step 2 - Generate class list without timetable
existingClasses = []
selectedCourses = {} selectedCourses = {}
emptyClasses = {} # List of all classes with how many students should be entered during generation emptyClasses = {} # List of all classes with how many students should be entered during generation
# calculate # of times to run class # calculate # of times to run class
@@ -379,6 +381,8 @@ def generateScheduleV3(students, courses):
classRunCount = math.floor(activeCourses[index]["Requests"] / median) classRunCount = math.floor(activeCourses[index]["Requests"] / median)
remaining = activeCourses[index]["Requests"] % median remaining = activeCourses[index]["Requests"] % median
if classRunCount >= 1: existingClasses.append(index)
# Put # of classRunCount classes in emptyClasses # Put # of classRunCount classes in emptyClasses
for j in range(classRunCount): for j in range(classRunCount):
emptyClasses[index][f"{activeCourses[index]['Description']}-{j}"] = { emptyClasses[index][f"{activeCourses[index]['Description']}-{j}"] = {
@@ -438,37 +442,65 @@ def generateScheduleV3(students, courses):
emptyClasses[index][f"{activeCourses[index]['Description']}-{j}"]["expectedLen"] = newExpectedLens[j] emptyClasses[index][f"{activeCourses[index]['Description']}-{j}"]["expectedLen"] = newExpectedLens[j]
else: else:
print("rem: ", remaining) # In the case that the remaining requests are unable to be resolved
print("running: ", classRunCount) # Fill as many requests into class as possible, any left that can't fit,
# I don't think it is possible to get to this point # Will need to be ignored so later we can fold them into their alternative
# but just in case # choices
print("Unhandled error!!!!!") for j in range(classRunCount):
if emptyClasses[index][f"{activeCourses[index]['Description']}-{j}"]["expectedLen"] < classCap and remaining > 0:
emptyClasses[index][f"{activeCourses[index]['Description']}-{j}"]["expectedLen"] += 1
remaining -= 1
# print(emptyClasses) tempStudents = students
while len(tempStudents) > 0:
student = tempStudents[random.randint(0, len(students)-1)]
#================================================================= altOffset = 0
pass alternates = [request for request in student["requests"] if request["alt"]]
for request in (request for request in student["requests"] if not request["alt"] and request not in ["XAT--12A-S", "XAT--12B-S"]):
classNum = classRunCount course = request["CrsNo"]
if course in existingClasses:
for student in students: done = False
for request in (request for request in student["requests"] if not request["alt"]): while not done:
currentCourse = request["CrsNo"] breakCname = False
if currentCourse == activeCourses[index]["CrsNo"]: for cname in emptyClasses[course]:
cname = f"{activeCourses[index]['Description']}-{classNum-(classRunCount-1)}" if breakCname: break
if cname in selectedCourses: if cname in selectedCourses:
if student["Pupil #"] not in selectedCourses[cname]["students"]: if len(selectedCourses[cname]["students"]) < emptyClasses[course][cname]["expectedLen"]:
if len(selectedCourses[cname]["students"]) < classCap:
# Class exists and there is room # Class exists and there is room
selectedCourses[cname]["students"].append(student["Pupil #"]) selectedCourses[cname]["students"].append(student["Pupil #"])
elif len(selectedCourses[cname]["students"]) == classCap: done = True
classRunCount -= 1 breakCname = True
elif cname not in selectedCourses: elif len(selectedCourses[cname]["students"]) == emptyClasses[course][cname]["expectedLen"]:
selectedCourses[cname] = { # Class exists and there no room
"students": [student["Pupil #"]],
"CrsNo": currentCourse, # If this is the last class in that course, fold student to alternate
"Description": courses[currentCourse]["Description"] if cname[len(cname)-1] == str((len(emptyClasses[course])-1)):
} for i in range(len(alternates)):
if i == altOffset:
if i < len(alternates)-1:
done = True # force stop to move to next class
else:
course = alternates[i]
altOffset += 1 # Change offset in case we need another alternate
breakCname = True
elif cname not in selectedCourses:
selectedCourses[cname] = {
"students": [student["Pupil #"]],
"CrsNo": course,
"Description": courses[course]["Description"]
}
done = True
breakCname = True
else:
#use alternate
print("use alternate")
tempStudents.remove(student)
# for course in selectedCourses: # for course in selectedCourses:
# print("Class: ", selectedCourses[course]["Description"]) # print("Class: ", selectedCourses[course]["Description"])