reformat v3 step 2clear
This commit is contained in:
1 parent
38cd356efb
commit
c500ceff44
3 files changed
+62
-11640
No files matched your search
+1
-11613
File diff suppressed because it is too large.
Load diff
@@ -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
@@ -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"])
|
||||||
|
|||||||
Reference in new issue
Block a user