-
Notifications
You must be signed in to change notification settings - Fork 0
/
algorithmfuncs.mjs
109 lines (95 loc) · 2.69 KB
/
algorithmfuncs.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// helper functions
export function timeToString(time) {
let string = '';
const hour = time.split(':')[0];
const min = time.split(':')[1];
let suf = '';
if(hour>=12){
suf = "p.m.";
}
else{
suf = "a.m";
}
if(hour>12){
string += hour%12;
string+= `:${min} `;
string += suf;
}
else{
string += hour;
string += `:${min} `;
string += suf;
}
return string;
}
export function checkConflict(course1, course2){
const course1Start = course1.start;
const course1End= course1.end;
const course1Days = course1.days;
const course2Start = course2.start;
const course2End = course2.end;
const course2Days = course2.days;
if((course1Start <= course2End) && (course1End >= course2Start)){
for(let i =0; i<course1Days.length;i++){
if(course2Days.includes(course1Days[i])){
return false;
}
}
}
return true;
}
export function genSchedule(courses){
let invalid = true;
let pickedCourses =[];
let sched = [];
let count =0;
if(courses.length<4){
return -1;
}
//put the following in a while loop
while(invalid){
if (count=== 1000)
{
break;
}
sched = [...courses];
const course1 = sched[Math.floor(Math.random() * sched.length)];
const index1 = sched.indexOf(course1);
sched.splice(index1,1);
const course2 = sched[Math.floor(Math.random() * sched.length)];
const index2 = sched.indexOf(course2);
sched.splice(index2,1);
const course3 = sched[Math.floor(Math.random() * sched.length)];
const index3 = sched.indexOf(course3);
sched.splice(index3,1);
const course4 = sched[Math.floor(Math.random() * sched.length)];
const index4 = sched.indexOf(course4);
sched.splice(index4,1);
pickedCourses = [course1, course2, course3, course4];
const newPicked = pickedCourses.filter((ele, index)=>{
for(let i=index+1;i<pickedCourses.length;i++){
if(checkConflict(ele, pickedCourses[i]) === false){
return false;
}
}
return true;
});
//stops the while loop as the schedule generated is valid
if(newPicked.length === 4){
invalid = false;
}
count++;
}
if(count===1000){
return -1;
}
return pickedCourses;
}
export function timeToInt(time){
let intTime =0;
const hour = time.split(':')[0];
const min = time.split(':')[1];
intTime += hour*60;
intTime += min*1;
return intTime;
}