Advertisement
SashkoKlincharov

[Java][НП] - Распоредувач на задачи

Aug 27th, 2021
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.57 KB | None | 0 0
  1.  
  2.  
  3. Потребно е да се дефинираат два распоредувачи на задачи кои го имплеметираат интерфејсот TaskScheduler. TaskScheduler е генерички интерфејс за распоредување на задачи (Task) со еден метод schedule кој прима низа од задачи а како резултат се очекува да врати листа од истите тие задачи распоредени согласно критериумите за распоредување.
  4.  
  5. Задача (Task) е интерфејс кој имплемeнтира метод кој го дава редниот број на задачата за извршување. Постојат да вида на задачи (TimedTask и PriorityTask). Редниот број на извршување на задачата кај TimedTask е дефиниран преку времето на извршување (time), додека кај PriorityTask тој е дефиниран преку приоритетот на извршување (priority).
  6.  
  7. Првиот распоредувач ги распоредува задачите на тој начин што истите ги сортира според нивниот реден број. Неговата имплементација потребно е да биде дадена со анонимна класа (во рамки на методот getOrdered од класата Schedulers).
  8.  
  9. Вториот распоредувач го задржува редоследот на добиените задачи, но, ги филтрира (отфрла) сите задачи со поголем реден број од даден праг (order). Неговата имплементација потребно е да биде дадена со ламбда израз (во рамки на методот getFiltered од класата Schedulers).
  10.  
  11. Распоредените задачи се стартуваат со помош на генеричката класа TaskRunner. За оваа класа потребно е да го дефинирате само параметарскиот тип.
  12.  
  13.  
  14. import java.util.Arrays;
  15. import java.util.Comparator;
  16. import java.util.List;
  17. import java.util.Scanner;
  18. import java.util.stream.Collectors;
  19.  
  20. /**
  21. * I Partial exam 2016
  22. */
  23. public class TaskSchedulerTest {
  24. public static void main(String[] args) {
  25. Scanner scanner = new Scanner(System.in);
  26. int n = scanner.nextInt();
  27. Task[] timeTasks = new Task[n];
  28. for (int i = 0; i < n; ++i) {
  29. int x = scanner.nextInt();
  30. timeTasks[i] = new TimedTask(x);
  31. }
  32. n = scanner.nextInt();
  33. Task[] priorityTasks = new Task[n];
  34. for (int i = 0; i < n; ++i) {
  35. int x = scanner.nextInt();
  36. priorityTasks[i] = new PriorityTask(x);
  37. }
  38. Arrays.stream(priorityTasks).forEach(System.out::println);
  39. TaskRunner<Task> runner = new TaskRunner<>();
  40. System.out.println("=== Ordered tasks ===");
  41. System.out.println("Timed tasks");
  42. runner.run(Schedulers.getOrdered(), timeTasks);
  43. System.out.println("Priority tasks");
  44. runner.run(Schedulers.getOrdered(), priorityTasks);
  45. int filter = scanner.nextInt();
  46. System.out.printf("=== Filtered time tasks with order less then %d ===\n", filter);
  47. runner.run(Schedulers.getFiltered(filter), timeTasks);
  48. System.out.printf("=== Filtered priority tasks with order less then %d ===\n", filter);
  49. runner.run(Schedulers.getFiltered(filter), priorityTasks);
  50. scanner.close();
  51. }
  52. }
  53.  
  54. class TaskRunner<T extends Task> {
  55. public void run(TaskScheduler<T> scheduler, T[] tasks) {
  56. List<T> order = scheduler.schedule(tasks);
  57. order.forEach(System.out::println);
  58. }
  59. }
  60.  
  61. interface TaskScheduler<T extends Task> {
  62. List<T> schedule(T[] tasks);
  63.  
  64. }
  65.  
  66. interface Task extends Comparable<Task> {
  67. //dopolnete ovde
  68. int getOrder();
  69.  
  70. default int compareTo(Task o) {
  71. return Integer.compare(this.getOrder(),o.getOrder());
  72. }
  73.  
  74. }
  75.  
  76. class PriorityTask implements Task {
  77. private final int priority;
  78.  
  79. public PriorityTask(int priority) {
  80. this.priority = priority;
  81. }
  82.  
  83.  
  84. @Override
  85. public String toString() {
  86. return String.format("PT -> %d", getOrder());
  87. }
  88.  
  89. @Override
  90. public int getOrder() {
  91. return priority;
  92. }
  93.  
  94. }
  95.  
  96. class TimedTask implements Task {
  97. private final int time;
  98.  
  99. public TimedTask(int time) {
  100. this.time = time;
  101. }
  102.  
  103.  
  104. @Override
  105. public String toString() {
  106. return String.format("TT -> %d", getOrder());
  107. }
  108.  
  109. @Override
  110. public int getOrder() {
  111. return time;
  112. }
  113.  
  114. }
  115.  
  116.  
  117. class Schedulers {
  118. public static <T extends Task> TaskScheduler<T> getOrdered() {
  119.  
  120. // vashiot kod ovde (annonimous class)
  121. TaskScheduler<T> ts = new TaskScheduler<T>() {
  122. @Override
  123. public List<T> schedule(T[] tasks) {
  124. return Arrays.stream(tasks).sorted(Task::compareTo).collect(Collectors.toList());
  125. }
  126. };
  127. return ts;
  128.  
  129. }
  130.  
  131. public static <T extends Task> TaskScheduler<T> getFiltered(int order) {
  132.  
  133. // vashiot kod ovde (lambda expression)
  134. return tasks -> Arrays.stream(tasks).filter(each -> each.getOrder()<order).collect(Collectors.toList());
  135.  
  136. }
  137. }
  138.  
  139.  
  140.  
  141. Sample input
  142.  
  143. 28
  144. 283 975 946 738 882 175 55 814 47 28 552 689 462 967 12 523 644 973 439 978 973 193 653 757 655 441 514 234
  145. 9
  146. 65 351 130 252 278 281 899 763 141
  147. 500
  148.  
  149. Sample output
  150.  
  151. PT -> 65
  152. PT -> 351
  153. PT -> 130
  154. PT -> 252
  155. PT -> 278
  156. PT -> 281
  157. PT -> 899
  158. PT -> 763
  159. PT -> 141
  160. === Ordered tasks ===
  161. Timed tasks
  162. TT -> 12
  163. TT -> 28
  164. TT -> 47
  165. TT -> 55
  166. TT -> 175
  167. TT -> 193
  168. TT -> 234
  169. TT -> 283
  170. TT -> 439
  171. TT -> 441
  172. TT -> 462
  173. TT -> 514
  174. TT -> 523
  175. TT -> 552
  176. TT -> 644
  177. TT -> 653
  178. TT -> 655
  179. TT -> 689
  180. TT -> 738
  181. TT -> 757
  182. TT -> 814
  183. TT -> 882
  184. TT -> 946
  185. TT -> 967
  186. TT -> 973
  187. TT -> 973
  188. TT -> 975
  189. TT -> 978
  190. Priority tasks
  191. PT -> 65
  192. PT -> 130
  193. PT -> 141
  194. PT -> 252
  195. PT -> 278
  196. PT -> 281
  197. PT -> 351
  198. PT -> 763
  199. PT -> 899
  200. === Filtered time tasks with order less then 500 ===
  201. TT -> 283
  202. TT -> 175
  203. TT -> 55
  204. TT -> 47
  205. TT -> 28
  206. TT -> 462
  207. TT -> 12
  208. TT -> 439
  209. TT -> 193
  210. TT -> 441
  211. TT -> 234
  212. === Filtered priority tasks with order less then 500 ===
  213. PT -> 65
  214. PT -> 351
  215. PT -> 130
  216. PT -> 252
  217. PT -> 278
  218. PT -> 281
  219. PT -> 141
  220.  
  221.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement