[chore:] single-semester-side limiting of courses

This commit is contained in:
2026-06-01 17:00:39 +02:00
parent 895c55a52f
commit c46417c56d
2 changed files with 31 additions and 24 deletions
+12 -5
View File
@@ -148,7 +148,7 @@ public class CourseCrafter
for (int semester = 1; semester <= 4; semester++) for (int semester = 1; semester <= 4; semester++)
{ {
int cancel = 0; int cancel = 0;
while (GeneratedCourses.Count(c => c.Semester == semester) < Settings.Instance.NumCoursesPerSemester) while (GeneratedCourses.Count(c => c.Semester == semester) < Settings.Instance.NumCoursesPerSemester[semester-1])
{ {
cancel++; cancel++;
if (cancel >= 20) break; if (cancel >= 20) break;
@@ -349,7 +349,9 @@ public class CourseCrafter
bool requestExit() bool requestExit()
{ {
globalCount++; globalCount++;
if (GeneratedCourses.Count >= Settings.Instance.NumCoursesPerSemester * 4) return true; int sum = Settings.Instance.NumCoursesPerSemester[0] + Settings.Instance.NumCoursesPerSemester[1] +
Settings.Instance.NumCoursesPerSemester[2] + Settings.Instance.NumCoursesPerSemester[3];
if (GeneratedCourses.Count >= sum) return true;
int low = 0; int low = 0;
foreach (var item in initial_sportlist) foreach (var item in initial_sportlist)
@@ -440,7 +442,7 @@ public class CourseCrafter
if (sportCoursesInSemester >= sport.Semester[semesterIndex]) if (sportCoursesInSemester >= sport.Semester[semesterIndex])
continue; continue;
if (GeneratedCourses.Count(c => c.Semester == semester) >= Settings.Instance.NumCoursesPerSemester) if (GeneratedCourses.Count(c => c.Semester == semester) >= Settings.Instance.NumCoursesPerSemester[semester-1])
continue; continue;
var directlyPlaceable = remainingStudents var directlyPlaceable = remainingStudents
@@ -683,7 +685,7 @@ public class CourseCrafter
if (sportCoursesInThisSemester >= sp.Semester[i]) if (sportCoursesInThisSemester >= sp.Semester[i])
continue; continue;
if (totalCoursesPerSemester[i] >= Settings.Instance.NumCoursesPerSemester) if (totalCoursesPerSemester[i] >= Settings.Instance.NumCoursesPerSemester[i])
continue; continue;
int freeInterestedStudents = interestedStudents int freeInterestedStudents = interestedStudents
@@ -706,6 +708,11 @@ public class CourseCrafter
return bestSem; return bestSem;
} }
ReloadResult();
}
public static void ReloadResult()
{
var errors = ValidateCourses(GeneratedCourses); var errors = ValidateCourses(GeneratedCourses);
if (errors.Count == 0) if (errors.Count == 0)
@@ -734,7 +741,7 @@ public class CourseCrafter
} }
} }
} }
} }
public static string GenerateStatistics() public static string GenerateStatistics()
{ {
GeneratedCourses.Sort((x,y) => x.Semester.CompareTo(y.Semester) ); GeneratedCourses.Sort((x,y) => x.Semester.CompareTo(y.Semester) );
+1 -1
View File
@@ -85,7 +85,7 @@ public class Settings
public List<Student> Students { get; set; } = []; public List<Student> Students { get; set; } = [];
public List<Sport> Sports { get; set; } = []; public List<Sport> Sports { get; set; } = [];
public int NumCoursesPerSemester { get; set; } = 10; // Exact Amount of courses, not a maximum public int[] NumCoursesPerSemester { get; set; } = [10,10,11,11]; // Exact Amount of courses, not a maximum
public Settings() public Settings()
{ {