borovaneca

Race

Mar 11th, 2023
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.28 KB | None | 0 0
  1. package Fundamentals.Regex.Exercise;
  2.  
  3. import java.util.*;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6. import java.util.stream.Collectors;
  7.  
  8. public class Race {
  9.     public static void main(String[] args) {
  10.         Scanner scanner = new Scanner(System.in);
  11.  
  12.  
  13.         String participants = scanner.nextLine();
  14.         List<String> racers = Arrays.stream(participants.split(", ")).collect(Collectors.toList());
  15.         String regexLetters = "[A-Za-z]*";
  16.         Pattern patternLetters = Pattern.compile(regexLetters);
  17.  
  18.         String timeRegex = "[0-9]*";
  19.         Pattern patternTime = Pattern.compile(timeRegex);
  20.  
  21.         String input = scanner.nextLine();
  22.         Map<String, Integer> racerDistance = new LinkedHashMap<>();
  23.         racers.forEach(name -> racerDistance.put(name, 0));
  24.  
  25.         while (!input.equals("end of race")){
  26.  
  27.             StringBuilder racerName = new StringBuilder();
  28.             StringBuilder racerTime = new StringBuilder();
  29.  
  30.             Matcher matcherLetters = patternLetters.matcher(input);
  31.             while (matcherLetters.find()){
  32.                 racerName.append(matcherLetters.group());
  33.             }
  34.             String name = String.valueOf(racerName);
  35.  
  36.             Matcher matcherTime = patternTime.matcher(input);
  37.             while (matcherTime.find()){
  38.                 racerTime.append(matcherTime.group());
  39.             }
  40.             String numbers = String.valueOf(racerTime);
  41.  
  42.             int sumTime = 0;
  43.             for (int i = 0; i < numbers.length(); i++) {
  44.                 sumTime += Integer.parseInt(String.valueOf(numbers.charAt(i)));
  45.             }
  46.  
  47.             if (racerDistance.containsKey(name)){
  48.                 racerDistance.put(name, sumTime + racerDistance.get(name));
  49.             }
  50.  
  51.  
  52.             input = scanner.nextLine();
  53.         }
  54.  
  55.         List<String> top3Names = racerDistance.entrySet().stream()
  56.                 .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
  57.                 .limit(3)
  58.                 .map(entry -> entry.getKey())
  59.                 .collect(Collectors.toList());
  60.  
  61.         System.out.println("1st place: " + top3Names.get(0));
  62.         System.out.println("2nd place: " + top3Names.get(1));
  63.         System.out.println("3rd place: " + top3Names.get(2));
  64.  
  65.     }
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment