Advertisement
dzocesrce

[NP] F1 Race

Apr 14th, 2025
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.79 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.List;
  3. import java.util.stream.Collectors;
  4. import java.time.Duration;
  5. import java.time.LocalTime;
  6. import java.util.ArrayList;
  7. import java.util.Comparator;
  8. import java.util.List;
  9.  
  10. class Driver implements Comparable<Driver> {
  11.     public static int finalPos=0;
  12.  
  13.     private String name;
  14.     private List<Lap> laps;
  15.  
  16.     public Driver(String name,List<Lap> laps) {
  17.         this.name = name;
  18.         this.laps = laps;
  19.     }
  20.  
  21.     private Lap getFastestLap(){
  22.         return laps.stream().min(Comparator.naturalOrder()).get();
  23.     }
  24.     public static Driver createDriver(String s) {
  25.         String[] parts = s.split("\\s+");
  26.         String name = parts[0];
  27.         List<Lap> laps = new ArrayList<>();
  28.         laps.add(new Lap(parts[1]));
  29.         laps.add(new Lap(parts[2]));
  30.         laps.add(new Lap(parts[3]));
  31.         return new Driver(name,laps);
  32.     }
  33.  
  34.     @Override
  35.     public int compareTo(Driver o) {
  36.         return (int)Long.compare(getFastestLap().getLocalTimeVersion().toNanoOfDay()
  37.                 ,o.getFastestLap().getLocalTimeVersion().toNanoOfDay());
  38.     }
  39.  
  40.     @Override
  41.     public String toString() {
  42.         return String.format("%d. %-10s%10s",++finalPos,name,getFastestLap().getTime());
  43.     }
  44. }
  45.  
  46. class Lap implements Comparable<Lap>{
  47.     private String time;
  48.  
  49.     public Lap(String time) {
  50.         this.time = time;
  51.     }
  52.  
  53.     public String getTime() {
  54.         return time;
  55.     }
  56.  
  57.     public LocalTime getLocalTimeVersion(){
  58.         String[] parts= time.split(":");
  59.         int minutes= Integer.parseInt(parts[0]);
  60.         int seconds= Integer.parseInt(parts[1]);
  61.         int nanos= Integer.parseInt(parts[2]);
  62.         return LocalTime.of(0,minutes,seconds,nanos);
  63.     }
  64.  
  65.     @Override
  66.     public int compareTo(Lap o) {
  67.         return (int)Long.compare(getLocalTimeVersion().toNanoOfDay(),o.getLocalTimeVersion().toNanoOfDay());
  68.     }
  69.  
  70.     @Override
  71.     public String toString() {
  72.         return time+" "+getLocalTimeVersion();
  73.     }
  74. }
  75.  
  76. class F1Race {
  77.  
  78.     private List<Driver> drivers;
  79.  
  80.     public F1Race() {
  81.         this.drivers = drivers;
  82.     }
  83.  
  84.     public void readResults(InputStream in) {
  85.         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
  86.         this.drivers= bufferedReader.lines().map(i->Driver.createDriver(i)).collect(Collectors.toList());
  87.     }
  88.  
  89.     public void printSorted(PrintStream out) {
  90.         PrintWriter printWriter= new PrintWriter(out);
  91.  
  92.         this.drivers.stream().sorted().forEach(i->printWriter.println(i));
  93.         printWriter.flush();
  94.     }
  95. }
  96.  
  97. public class F1Test {
  98.  
  99.     public static void main(String[] args) {
  100.         F1Race f1Race = new F1Race();
  101.         f1Race.readResults(System.in);
  102.         f1Race.printSorted(System.out);
  103.  
  104.     }
  105.  
  106. }
  107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement