Advertisement
SashkoKlincharov

[Java][НП] - Ф1 Трка

Aug 27th, 2021
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1.  
  2.  
  3. Да се имплементира класа F1Race која ќе чита од влезен тек (стандарден влез, датотека, ...) податоци за времињата од последните 3 круга на неколку пилоти на Ф1 трка. Податоците се во следниот формат:
  4.  
  5. Driver_name lap1 lap2 lap3, притоа lap е во формат mm:ss:nnn каде mm се минути ss се секунди nnn се милисекунди (илјадити делови од секундата). Пример:
  6.  
  7. Vetel 1:55:523 1:54:987 1:56:134.
  8.  
  9. Ваша задача е да ги имплементирате методите:
  10.  
  11. F1Race() - default конструктор
  12. void readResults(InputStream inputStream) - метод за читање на податоците
  13. void printSorted(OutputStream outputStream) - метод кој ги печати сите пилоти сортирани според нивното најдобро време (најкраткото време од нивните 3 последни круга) во формат Driver_name best_lap со 10 места за името на возачот (порамнето од лево) и 10 места за времето на најдобриот круг порамнето од десно. Притоа времето е во истиот формат со времињата кои се читаат.
  14.  
  15.  
  16.  
  17. import java.io.*;
  18. import java.util.*;
  19. import java.util.stream.Collectors;
  20.  
  21. public class F1Test {
  22.  
  23. public static void main(String[] args) throws IOException {
  24. F1Race f1Race = new F1Race();
  25. f1Race.readResults(System.in);
  26. f1Race.printSorted(System.out);
  27. }
  28.  
  29. }
  30.  
  31. class F1Race {
  32. // vashiot kod ovde
  33. private List<Driver> drivers;
  34.  
  35. public F1Race() {
  36. drivers = new ArrayList<>();
  37. }
  38. public void readResults(InputStream inputStream) throws IOException {
  39. BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
  40. String line = null;
  41. while((line = br.readLine())!=null){
  42. drivers.add(Driver.createDriver(line));
  43. }
  44. br.close();
  45. }
  46.  
  47. public void printSorted(OutputStream outputStream) {
  48. PrintWriter pw = new PrintWriter(new OutputStreamWriter(outputStream),true);
  49. drivers.stream().forEach(Driver::sortLaps);
  50. Collections.sort(drivers,Driver::compareTo);
  51. for (int i = 0; i < drivers.size(); i++) {
  52. pw.println(String.format("%d. %-10s%10s",i+1,drivers.get(i).getName(),drivers.get(i).getLapOnIndex(0)));
  53. }
  54. }
  55. }
  56.  
  57. class Driver implements Comparable<Driver> {
  58. private String name;
  59. private List<Lap> laps;
  60.  
  61. public Driver(String name, List<Lap> laps) {
  62. this.name = name;
  63. this.laps = laps;
  64. }
  65.  
  66. public List<Lap> getLaps() {
  67. return laps;
  68. }
  69.  
  70. public void sortLaps(){
  71. Collections.sort(laps,Lap::compareTo);
  72. }
  73. public String getName() {
  74. return name;
  75. }
  76.  
  77. public Lap getLapOnIndex(int i){
  78. return laps.get(i);
  79. }
  80.  
  81. public static Driver createDriver(String line) {
  82. String [] parts = line.split("\\s+");
  83. String name = parts[0];
  84. List<Lap> pom = new ArrayList<>();
  85. for (int i = 1 ; i < parts.length; i++)
  86. pom.add(Lap.createLap(parts[i]));
  87.  
  88. return new Driver(name,pom);
  89. }
  90.  
  91. @Override
  92. public int compareTo(Driver o) {
  93. return this.laps.get(0).compareTo(o.laps.get(0));
  94. }
  95. }
  96.  
  97. class Lap implements Comparable<Lap> {
  98. private int minutes;
  99. private int seconds;
  100. private int miliseconds;
  101.  
  102. public Lap(int minutes, int seconds, int miliseconds) {
  103. this.minutes = minutes;
  104. this.seconds = seconds;
  105. this.miliseconds = miliseconds;
  106. }
  107.  
  108. @Override
  109. public String toString() {
  110. return String.format("%d:%02d:%03d",minutes,seconds,miliseconds);
  111. }
  112.  
  113. public static Lap createLap(String time) {
  114. String [] splitter = time.split(":");
  115. int minutes = Integer.parseInt(splitter[0]);
  116. int seconds = Integer.parseInt(splitter[1]);
  117. int mili = Integer.parseInt(splitter[2]);
  118. return new Lap(minutes,seconds,mili);
  119. }
  120.  
  121. public int getMiliseconds() {
  122. return miliseconds;
  123. }
  124.  
  125. public int getMinutes() {
  126. return minutes;
  127. }
  128.  
  129. public int getSeconds() {
  130. return seconds;
  131. }
  132.  
  133. @Override
  134. public int compareTo(Lap o) {
  135. int res1 = Integer.compare(this.minutes,o.minutes);
  136. if(res1==0){
  137. int res2 = Integer.compare(this.seconds,o.seconds);
  138. if(res2==0){
  139. return Integer.compare(this.miliseconds,o.miliseconds);
  140. }
  141. return res2;
  142. }
  143. return res1;
  144. }
  145. }
  146.  
  147.  
  148. Sample input
  149.  
  150. Massa 1:57:563 1:55:187 1:55:634
  151. Vettel 1:55:523 1:54:987 1:56:134
  152. Alonso 1:53:563 1:56:187 1:54:139
  153. Hamilton 1:56:174 1:54:371 1:56:199
  154.  
  155. Sample output
  156.  
  157. 1. Alonso 1:53:563
  158. 2. Hamilton 1:54:371
  159. 3. Vettel 1:54:987
  160. 4. Massa 1:55:187
  161.  
  162.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement