work on step 6
This commit is contained in:
1 parent
e82b39d0b7
commit
dc4b28ae4c
2 files changed
+29
-10
No files matched your search
@@ -176,11 +176,13 @@ def generateScheduleV3(students: list, courses: dict, blockClassLimit: int=40, s
|
|||||||
for request in (request for request in student["requests"] if not request["alt"] and request["CrsNo"] not in ["XAT--12A-S", "XAT--12B-S"]):
|
for request in (request for request in student["requests"] if not request["alt"] and request["CrsNo"] not in ["XAT--12A-S", "XAT--12B-S"]):
|
||||||
course = request["CrsNo"]
|
course = request["CrsNo"]
|
||||||
getAvailableCourse = True
|
getAvailableCourse = True
|
||||||
|
isAlt = False
|
||||||
while getAvailableCourse:
|
while getAvailableCourse:
|
||||||
if course in emptyClasses:
|
if course in emptyClasses:
|
||||||
# if course exists, get first available class
|
# if course exists, get first available class
|
||||||
for cname in emptyClasses[course]:
|
for cname in emptyClasses[course]:
|
||||||
if cname in selectedCourses:
|
if cname in selectedCourses:
|
||||||
|
if isAlt: emptyClasses[course][cname]["expectedLen"] += 1
|
||||||
if len(selectedCourses[cname]["students"]) < emptyClasses[course][cname]["expectedLen"]:
|
if len(selectedCourses[cname]["students"]) < emptyClasses[course][cname]["expectedLen"]:
|
||||||
# Class exists with room for student
|
# Class exists with room for student
|
||||||
selectedCourses[cname]["students"].append({
|
selectedCourses[cname]["students"].append({
|
||||||
@@ -195,7 +197,8 @@ def generateScheduleV3(students: list, courses: dict, blockClassLimit: int=40, s
|
|||||||
if len(alternates) > 0:
|
if len(alternates) > 0:
|
||||||
# Use alternate
|
# Use alternate
|
||||||
course = alternates[0]["CrsNo"]
|
course = alternates[0]["CrsNo"]
|
||||||
alternates.remove(course)
|
alternates.remove(alternates[0])
|
||||||
|
isAlt = True
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
# Force break loop, ignore and let an admin
|
# Force break loop, ignore and let an admin
|
||||||
@@ -218,7 +221,8 @@ def generateScheduleV3(students: list, courses: dict, blockClassLimit: int=40, s
|
|||||||
if len(alternates) > 0:
|
if len(alternates) > 0:
|
||||||
# Use alternate
|
# Use alternate
|
||||||
course = alternates[0]["CrsNo"]
|
course = alternates[0]["CrsNo"]
|
||||||
alternates.remove(course)
|
alternates.remove(alternates[0])
|
||||||
|
isAlt = True
|
||||||
else:
|
else:
|
||||||
# Force break loop, ignore and let an admin
|
# Force break loop, ignore and let an admin
|
||||||
# handle options to solve for missing class
|
# handle options to solve for missing class
|
||||||
@@ -333,12 +337,28 @@ def generateScheduleV3(students: list, courses: dict, blockClassLimit: int=40, s
|
|||||||
|
|
||||||
# Step 6 - Evaluate, move students to fix
|
# Step 6 - Evaluate, move students to fix
|
||||||
for student in students:
|
for student in students:
|
||||||
blocksLen = []
|
blocks = [student["schedule"][block] for block in student["schedule"]]
|
||||||
for block in student["schedule"]:
|
count, conflicts = 0, True
|
||||||
blocksLen.append(len(student["schedule"][block]))
|
while conflicts:
|
||||||
# If there is a cross over...
|
count = sum(1 for b in blocks if len(b)==1)
|
||||||
if len(student["schedule"][block]) > 1:
|
|
||||||
pass
|
print(blocks)
|
||||||
|
print(count)
|
||||||
|
|
||||||
|
if count < student["expectedClasses"]:
|
||||||
|
# Attempt to fix
|
||||||
|
index = blocks.index(max(blocks))
|
||||||
|
for i in range(len(blocks[index])):
|
||||||
|
break
|
||||||
|
|
||||||
|
elif count == student["expectedClasses"]:
|
||||||
|
conflicts = False
|
||||||
|
elif count > student["expectedClasses"]:
|
||||||
|
print("Impossible error")
|
||||||
|
|
||||||
|
break
|
||||||
|
|
||||||
|
break # for debug
|
||||||
|
|
||||||
return running
|
return running
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ def getSampleStudents(data_dir: str, log: bool = False) -> list[dict]:
|
|||||||
"Description": row["Description"],
|
"Description": row["Description"],
|
||||||
"alt": alternate
|
"alt": alternate
|
||||||
})
|
})
|
||||||
if row["CrsNo"] in ["XAT--12A-S", "XAT--12B-S"]: mockStudents[student["studentIndex"]]["expectedClasses"] -= 1
|
|
||||||
else:
|
else:
|
||||||
newStudent = {
|
newStudent = {
|
||||||
"Pupil #": row["Pupil #"],
|
"Pupil #": row["Pupil #"],
|
||||||
@@ -76,9 +75,9 @@ def getSampleStudents(data_dir: str, log: bool = False) -> list[dict]:
|
|||||||
"remainingAlts": [],
|
"remainingAlts": [],
|
||||||
"studentIndex": len(mockStudents)
|
"studentIndex": len(mockStudents)
|
||||||
}
|
}
|
||||||
if row["CrsNo"] in ["XAT--12A-S", "XAT--12B-S"]: mockStudents[student["studentIndex"]]["expectedClasses"] -= 1
|
|
||||||
mockStudents.append(newStudent)
|
mockStudents.append(newStudent)
|
||||||
|
|
||||||
|
if row["CrsNo"] in ["XAT--12A-S", "XAT--12B-S"]: mockStudents[student["studentIndex"]]["expectedClasses"] -= 1
|
||||||
if log:
|
if log:
|
||||||
with open("./output/students.json", "w") as outfile:
|
with open("./output/students.json", "w") as outfile:
|
||||||
json.dump(mockStudents, outfile, indent=2)
|
json.dump(mockStudents, outfile, indent=2)
|
||||||
|
|||||||
Reference in new issue
Block a user