[chore:] single-semester-side limiting of courses
This commit is contained in:
+30
-23
@@ -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,35 +708,40 @@ public class CourseCrafter
|
|||||||
return bestSem;
|
return bestSem;
|
||||||
}
|
}
|
||||||
|
|
||||||
var errors = ValidateCourses(GeneratedCourses);
|
ReloadResult();
|
||||||
|
}
|
||||||
|
|
||||||
if (errors.Count == 0)
|
public static void ReloadResult()
|
||||||
{
|
{
|
||||||
MainWindow.Instance.TbResultLog.Text = "--- Alle generierten Kursen erfüllen die gegebenen Voraussetzungen ---";
|
var errors = ValidateCourses(GeneratedCourses);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MainWindow.Instance.TbResultLog.Text = "--- Bei der Generierung sind folgende Fehler aufgetreten: ---\n\n";
|
|
||||||
foreach (var e in errors)
|
|
||||||
MainWindow.Instance.TbResultLog.Text += e + "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var student in Settings.Instance.Students)
|
if (errors.Count == 0)
|
||||||
{
|
{
|
||||||
student.Result = new string[4];
|
MainWindow.Instance.TbResultLog.Text = "--- Alle generierten Kursen erfüllen die gegebenen Voraussetzungen ---";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MainWindow.Instance.TbResultLog.Text = "--- Bei der Generierung sind folgende Fehler aufgetreten: ---\n\n";
|
||||||
|
foreach (var e in errors)
|
||||||
|
MainWindow.Instance.TbResultLog.Text += e + "\n";
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var course in GeneratedCourses)
|
|
||||||
{
|
|
||||||
foreach (var student in Settings.Instance.Students)
|
foreach (var student in Settings.Instance.Students)
|
||||||
{
|
{
|
||||||
if (course.Instance.Students.Contains(student.ID))
|
student.Result = new string[4];
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var course in GeneratedCourses)
|
||||||
|
{
|
||||||
|
foreach (var student in Settings.Instance.Students)
|
||||||
{
|
{
|
||||||
student.Result[course.Semester - 1] = course.Instance.Sport.Name;
|
if (course.Instance.Students.Contains(student.ID))
|
||||||
|
{
|
||||||
|
student.Result[course.Semester - 1] = course.Instance.Sport.Name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
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
@@ -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()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user