Advertisement
adwas33

Untitled

Jan 14th, 2023
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. package com.freecoders.server;
  2.  
  3. import com.freecoders.server.entites.Availability;
  4.  
  5. import java.time.LocalDateTime;
  6. import java.util.ArrayList;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10.  
  11. public class TimeService {
  12.  
  13. public static List<LocalDateTime> divideTasks(List<Availability> availabilities, int numTasks, LocalDateTime deadline) {
  14. LocalDateTime now = LocalDateTime.now();
  15. List<LocalDateTime> startTimes = new ArrayList<>();
  16. for (Availability availability : availabilities) {
  17. if (availability.getFromDate().isAfter(now) && availability.getFromDate().isBefore(deadline)) {
  18. startTimes.add(availability.getFromDate());
  19. }
  20. }
  21.  
  22. if (startTimes.size() >= numTasks) {
  23. return startTimes.subList(0, numTasks);
  24. } else {
  25. int index = 0;
  26. List<LocalDateTime> dividedTasks = new ArrayList<>();
  27. for (int i = 0; i < numTasks; i++) {
  28. dividedTasks.add(startTimes.get(index));
  29. index = (index + 1) % startTimes.size();
  30. }
  31. return dividedTasks;
  32. }
  33. }
  34.  
  35. public static boolean checkForOverlappingTasks(List<LocalDateTime> tasks) {
  36. Map<LocalDateTime, Integer> taskCount = new HashMap<>();
  37. for (LocalDateTime task : tasks) {
  38. if (!taskCount.containsKey(task)) {
  39. taskCount.put(task, 1);
  40. } else {
  41. taskCount.put(task, taskCount.get(task) + 1);
  42. }
  43. }
  44. for (LocalDateTime task : tasks) {
  45. if (taskCount.get(task) > 1) {
  46. return true;
  47. }
  48. }
  49. return false;
  50. }
  51.  
  52. public static List<LocalDateTime> divideTasksWithUniqueStartTimes(List<Availability> availabilities, int numTasks, LocalDateTime deadline) {
  53. List<LocalDateTime> tasks = divideTasks(availabilities, numTasks, deadline);
  54. while (checkForOverlappingTasks(tasks)) {
  55. tasks = divideTasks(availabilities, numTasks, deadline);
  56. }
  57. return tasks;
  58. }
  59.  
  60.  
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement