Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Да се имплементира класа F1Race која ќе чита од влезен тек (стандарден влез, датотека, ...) податоци за времињата од последните 3 круга на неколку пилоти на Ф1 трка. Податоците се во следниот формат:
- Driver_name lap1 lap2 lap3, притоа lap е во формат mm:ss:nnn каде mm се минути ss се секунди nnn се милисекунди (илјадити делови од секундата). Пример:
- Vetel 1:55:523 1:54:987 1:56:134.
- Ваша задача е да ги имплементирате методите:
- F1Race() - default конструктор
- void readResults(InputStream inputStream) - метод за читање на податоците
- void printSorted(OutputStream outputStream) - метод кој ги печати сите пилоти сортирани според нивното најдобро време (најкраткото време од нивните 3 последни круга) во формат Driver_name best_lap со 10 места за името на возачот (порамнето од лево) и 10 места за времето на најдобриот круг порамнето од десно. Притоа времето е во истиот формат со времињата кои се читаат.
- import java.io.*;
- import java.util.*;
- import java.util.stream.Collectors;
- public class F1Test {
- public static void main(String[] args) throws IOException {
- F1Race f1Race = new F1Race();
- f1Race.readResults(System.in);
- f1Race.printSorted(System.out);
- }
- }
- class F1Race {
- // vashiot kod ovde
- private List<Driver> drivers;
- public F1Race() {
- drivers = new ArrayList<>();
- }
- public void readResults(InputStream inputStream) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
- String line = null;
- while((line = br.readLine())!=null){
- drivers.add(Driver.createDriver(line));
- }
- br.close();
- }
- public void printSorted(OutputStream outputStream) {
- PrintWriter pw = new PrintWriter(new OutputStreamWriter(outputStream),true);
- drivers.stream().forEach(Driver::sortLaps);
- Collections.sort(drivers,Driver::compareTo);
- for (int i = 0; i < drivers.size(); i++) {
- pw.println(String.format("%d. %-10s%10s",i+1,drivers.get(i).getName(),drivers.get(i).getLapOnIndex(0)));
- }
- }
- }
- class Driver implements Comparable<Driver> {
- private String name;
- private List<Lap> laps;
- public Driver(String name, List<Lap> laps) {
- this.name = name;
- this.laps = laps;
- }
- public List<Lap> getLaps() {
- return laps;
- }
- public void sortLaps(){
- Collections.sort(laps,Lap::compareTo);
- }
- public String getName() {
- return name;
- }
- public Lap getLapOnIndex(int i){
- return laps.get(i);
- }
- public static Driver createDriver(String line) {
- String [] parts = line.split("\\s+");
- String name = parts[0];
- List<Lap> pom = new ArrayList<>();
- for (int i = 1 ; i < parts.length; i++)
- pom.add(Lap.createLap(parts[i]));
- return new Driver(name,pom);
- }
- @Override
- public int compareTo(Driver o) {
- return this.laps.get(0).compareTo(o.laps.get(0));
- }
- }
- class Lap implements Comparable<Lap> {
- private int minutes;
- private int seconds;
- private int miliseconds;
- public Lap(int minutes, int seconds, int miliseconds) {
- this.minutes = minutes;
- this.seconds = seconds;
- this.miliseconds = miliseconds;
- }
- @Override
- public String toString() {
- return String.format("%d:%02d:%03d",minutes,seconds,miliseconds);
- }
- public static Lap createLap(String time) {
- String [] splitter = time.split(":");
- int minutes = Integer.parseInt(splitter[0]);
- int seconds = Integer.parseInt(splitter[1]);
- int mili = Integer.parseInt(splitter[2]);
- return new Lap(minutes,seconds,mili);
- }
- public int getMiliseconds() {
- return miliseconds;
- }
- public int getMinutes() {
- return minutes;
- }
- public int getSeconds() {
- return seconds;
- }
- @Override
- public int compareTo(Lap o) {
- int res1 = Integer.compare(this.minutes,o.minutes);
- if(res1==0){
- int res2 = Integer.compare(this.seconds,o.seconds);
- if(res2==0){
- return Integer.compare(this.miliseconds,o.miliseconds);
- }
- return res2;
- }
- return res1;
- }
- }
- Sample input
- Massa 1:57:563 1:55:187 1:55:634
- Vettel 1:55:523 1:54:987 1:56:134
- Alonso 1:53:563 1:56:187 1:54:139
- Hamilton 1:56:174 1:54:371 1:56:199
- Sample output
- 1. Alonso 1:53:563
- 2. Hamilton 1:54:371
- 3. Vettel 1:54:987
- 4. Massa 1:55:187
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement