Skip to content

Commit

Permalink
Revert "WIP: implement duplicate schedule checking in schedule genera…
Browse files Browse the repository at this point in the history
…tor"

This reverts commit 12c2cd3.
  • Loading branch information
ejcheng committed Feb 4, 2025
1 parent 12c2cd3 commit 6e1a218
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 36 deletions.
35 changes: 5 additions & 30 deletions src/components/ScheduleGenerate/ScheduleGenerateModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ export default defineComponent({
);
},
generateSchedules() {
const outputs: {
const output: {
semester: string;
schedule: Map<Course, Timeslot[]>;
fulfilledRequirements: Map<string, Requirement[]>;
Expand All @@ -191,31 +191,7 @@ export default defineComponent({
);
}
/** Checks if two `GeneratedScheduleOutput` objects `first` and `second` are equal. Outputs
* are equal if all three of the following conditions are true: outputs are in the same
* semester, they contain the same courses in the same order, and they have the same total credits.
*/
function isEqual(first: GeneratedScheduleOutput, second: GeneratedScheduleOutput) {
if (first.totalCredits !== second.totalCredits || first.semester !== second.semester) {
return false;
}
const firstScheduleEntries = Array.from(first.schedule.entries());
const secondScheduleEntries = Array.from(first.schedule.entries());
if (firstScheduleEntries.length !== secondScheduleEntries.length) {
return false;
}
for (let i = 0; i < firstScheduleEntries.length; i += 1) {
if (firstScheduleEntries[i][0].code !== secondScheduleEntries[i][0].code) {
return false;
}
}
return true;
}
const startTime = Date.now();
while (outputs.length < 5 && Date.now() - startTime < 1000) {
for (let i = 0; i < 5; i += 1) {
const courses = this.courses.map(
course =>
new Course(
Expand Down Expand Up @@ -335,11 +311,10 @@ export default defineComponent({
momentary.fulfilledRequirements = newFullfilledReqs;
momentary.totalCredits += deltaCredits;
if (outputs.every(output => !isEqual(output, momentary))) {
outputs.push(momentary);
}
output.push(momentary);
}
this.generatedScheduleOutputs = outputs;
this.generatedScheduleOutputs = output;
},
regenerateSchedule() {
this.generateSchedules();
Expand Down
21 changes: 15 additions & 6 deletions src/schedule-generator/algorithm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,28 @@ export default class ScheduleGenerator {
let performAdditionFlag = true;
const onlyCourseRequirement = course.requirements[0].name ?? 'nonsense-requirement';

// New logic: must be free for *all* time slots.
if (
actualFulfilledRequirements.has(onlyCourseRequirement) ||
fulfilledRequirements.has(course.code) ||
creditLimit - course.credits < 0
) {
performAdditionFlag = false;
} else {
for (const timeslot of course.timeslots) {
if (ScheduleGenerator.isTimeslotOccupied(schedule, timeslot)) {
performAdditionFlag = false;
}
}
}

if (
performAdditionFlag &&
course.timeslots.some(
timeslot => !ScheduleGenerator.isTimeslotOccupied(schedule, timeslot)
)
) {
course.timeslots.forEach(timeslot => {
if (ScheduleGenerator.isTimeslotOccupied(schedule, timeslot)) {
performAdditionFlag = false;
}
});

if (performAdditionFlag) {
ScheduleGenerator.addToSchedule(schedule, course, course.timeslots);
creditLimit -= course.credits;
totalCredits += course.credits;
Expand All @@ -53,6 +61,7 @@ export default class ScheduleGenerator {
}
}
});

return { semester, schedule, fulfilledRequirements, totalCredits };
}

Expand Down

0 comments on commit 6e1a218

Please sign in to comment.