Skip to content

Commit 0c881e3

Browse files
authored
Simplify minimizing lateness (#4999)
1 parent 704b587 commit 0c881e3

File tree

4 files changed

+86
-62
lines changed

4 files changed

+86
-62
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.thealgorithms.greedyalgorithms;
2+
3+
import java.util.Arrays;
4+
5+
public class MinimizingLateness {
6+
7+
public static class Job {
8+
String jobName;
9+
int startTime = 0;
10+
int lateness = 0;
11+
int processingTime;
12+
int deadline;
13+
14+
public Job(String jobName, int processingTime, int deadline) {
15+
this.jobName = jobName;
16+
this.processingTime = processingTime;
17+
this.deadline = deadline;
18+
}
19+
20+
public static Job of(String jobName, int processingTime, int deadline) {
21+
return new Job(jobName, processingTime, deadline);
22+
}
23+
24+
@Override
25+
public String toString() {
26+
return String.format("%s, startTime: %d, endTime: %d, lateness: %d", jobName, startTime, processingTime + startTime, lateness);
27+
}
28+
}
29+
30+
static void calculateLateness(Job... jobs) {
31+
32+
// sort the jobs based on their deadline
33+
Arrays.sort(jobs, (a, b) -> a.deadline - b.deadline);
34+
35+
int startTime = 0;
36+
37+
for (Job job : jobs) {
38+
job.startTime = startTime;
39+
startTime += job.processingTime;
40+
job.lateness = Math.max(0, startTime - job.deadline); // if the job finishes before deadline the lateness is 0
41+
}
42+
}
43+
}

src/main/java/com/thealgorithms/minimizinglateness/MinimizingLateness.java

Lines changed: 0 additions & 55 deletions
This file was deleted.

src/main/java/com/thealgorithms/minimizinglateness/lateness_data.txt

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.thealgorithms.greedyalgorithms;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import com.thealgorithms.greedyalgorithms.MinimizingLateness.Job;
6+
import org.junit.jupiter.api.Test;
7+
8+
public class MinimizingLatenessTest {
9+
10+
@Test
11+
void testCalculateLateness() {
12+
// Test case with three jobs
13+
Job job1 = new Job("Job1", 4, 6);
14+
Job job2 = new Job("Job2", 2, 8);
15+
Job job3 = new Job("Job3", 1, 9);
16+
Job job4 = new Job("Job4", 5, 9);
17+
Job job5 = new Job("Job5", 4, 10);
18+
Job job6 = new Job("Job6", 3, 5);
19+
20+
MinimizingLateness.calculateLateness(job1, job2, job3, job4, job5, job6);
21+
22+
// Check lateness for each job
23+
assertEquals(6, job4.lateness);
24+
assertEquals(0, job6.lateness);
25+
assertEquals(1, job2.lateness);
26+
}
27+
28+
@Test
29+
void testCheckStartTime() {
30+
31+
Job job1 = new Job("Job1", 2, 5);
32+
Job job2 = new Job("Job2", 1, 7);
33+
Job job3 = new Job("Job3", 3, 8);
34+
Job job4 = new Job("Job4", 2, 4);
35+
Job job5 = new Job("Job5", 4, 10);
36+
37+
MinimizingLateness.calculateLateness(job1, job2, job3, job4, job5);
38+
39+
assertEquals(2, job1.startTime);
40+
assertEquals(5, job3.startTime);
41+
assertEquals(8, job5.startTime);
42+
}
43+
}

0 commit comments

Comments
 (0)