196040

NP vezbi F1 trka

Nov 28th, 2021
860
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //package naprednolabs;
  2.  
  3. import java.io.*;
  4. import java.util.*;
  5. import java.util.stream.Collectors;
  6. import java.util.stream.Stream;
  7.  
  8. public class F1Test {
  9.     public static void main(String[] args) throws IOException {
  10.         F1Race f1Race = new F1Race();
  11.         f1Race.readResults(System.in);
  12.         f1Race.printSorted(System.out);
  13.     }
  14. }
  15.  
  16. class Pilot implements Comparable<Pilot> {
  17.     private String name;
  18.     private String lap1, lap2, lap3;
  19.     private int bestint;
  20.     private String best;
  21.  
  22.     public Pilot() {
  23.         this.name = "tanja savic";
  24.         this.lap1 = "empty";
  25.         this.lap2 = "empty";
  26.         this.lap3 = "empty";
  27.         this.bestint = 0;
  28.     }
  29.  
  30.     public Pilot(String name, String lap1, String lap2, String lap3) {
  31.         this.name = name;
  32.         this.lap1 = lap1;
  33.         this.lap2 = lap2;
  34.         this.lap3 = lap3;
  35.         calc();
  36.     }
  37.  
  38.     public static Pilot createPilot(String line) {
  39.         String[] help = line.split("\\s+");
  40.         return new Pilot(help[0], help[1], help[2], help[3]);
  41.     }
  42.  
  43.     private void calc() {
  44.         //1:57:563 1:55:187 1:55:634
  45.         String[] att1 = lap1.split(":");
  46.         String[] att2 = lap2.split(":");
  47.         String[] att3 = lap3.split(":");
  48.         int zalap1 = Integer.parseInt(att1[0]) * 60000 + Integer.parseInt(att1[1]) * 1000 + Integer.parseInt(att1[2]);
  49.         int zalap2 = Integer.parseInt(att2[0]) * 60000 + Integer.parseInt(att2[1]) * 1000 + Integer.parseInt(att2[2]);
  50.         int zalap3 = Integer.parseInt(att3[0]) * 60000 + Integer.parseInt(att3[1]) * 1000 + Integer.parseInt(att3[2]);
  51.         if (zalap1 < zalap2 && zalap1 < zalap3) {
  52.             this.best = lap1;
  53.             this.bestint = zalap1;
  54.         } else if (zalap2 < zalap1 && zalap2 < zalap3) {
  55.             this.best = lap2;
  56.             this.bestint = zalap2;
  57.         } else {
  58.             this.best = lap3;
  59.             this.bestint = zalap3;
  60.         }
  61.     }
  62.  
  63.     @Override
  64.     public int compareTo(Pilot other) {
  65.         return Integer.compare(this.bestint, other.bestint);
  66.     }
  67.  
  68.     @Override
  69.     public String toString() {
  70.         return String.format("%0$-10s", this.name) + String.format("%0$10s", this.best);
  71.     }
  72. }
  73.  
  74. class F1Race {
  75.     private List<Pilot> niza;
  76.  
  77.     public F1Race() {
  78.         this.niza = new ArrayList<>();
  79.     }
  80.  
  81.     public void readResults(InputStream inputStream) {
  82.         BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
  83.         this.niza = br.lines()
  84.                 .map(Pilot::createPilot)
  85.                 .collect(Collectors.toList());
  86.     }
  87.  
  88.     public void printSorted(OutputStream outputStream) {
  89.         PrintWriter pw = new PrintWriter(outputStream);
  90.         List<Pilot> attempt = this.niza.stream().sorted().collect(Collectors.toList());
  91.         pw.flush();
  92.         for (int i = 0; i < this.niza.size(); i++)
  93.             pw.println(i + 1 + ". " + attempt.get(i));
  94.         pw.flush();
  95.     }
  96. }
  97. /*
  98. Да се имплементира класа F1Race која ќе чита од влезен тек (стандарден влез, датотека, ...)
  99. податоци за времињата од последните 3 круга на неколку пилоти на Ф1 трка. Податоците се во следниот формат:
  100. Driver_name lap1 lap2 lap3, притоа lap е во формат mm:ss:nnn каде mm се минути ss се секунди
  101. nnn се милисекунди (илјадити делови од секундата). Пример:
  102. Vetel 1:55:523 1:54:987 1:56:134.
  103. Ваша задача е да ги имплементирате методите:
  104.     F1Race() - default конструктор
  105.     void readResults(InputStream inputStream) - метод за читање на податоците
  106.     void printSorted(OutputStream outputStream) - метод кој ги печати сите пилоти
  107.     сортирани според нивното најдобро време (најкраткото време од нивните 3 последни круга)
  108.     во формат Driver_name best_lap со 10 места за името на возачот (порамнето од лево) и
  109.     10 места за времето на најдобриот круг порамнето од десно. Притоа времето е во истиот
  110.     формат со времињата кои се читаат.
  111. */
  112.  
RAW Paste Data