Advertisement
Merry123

Untitled

Dec 1st, 2022
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.93 KB | None | 0 0
  1. package Exercises;
  2.  
  3. import java.util.*;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6.  
  7. public class Race {
  8.     public static void main(String[] args) {
  9.         Scanner sc = new Scanner(System.in);
  10.  
  11.         List<String> participants = Arrays.stream(sc.nextLine().split(", ")).toList();
  12.  
  13.         String input = sc.nextLine();
  14.  
  15.         Map<String, Integer> racersDistances = new LinkedHashMap<>();
  16.         participants.forEach(p -> racersDistances.put(p, 0));
  17.  
  18.         String regexLetters = "[A-Za-z]+";
  19.         Pattern patternLetters = Pattern.compile(regexLetters);
  20.  
  21.         String regexDigits = "\\d";
  22.         Pattern patternDigits = Pattern.compile(regexDigits);
  23.  
  24.         while (!input.equals("end of race")) {
  25.             StringBuilder name = new StringBuilder();
  26.             int distance = 0;
  27.  
  28.             Matcher matcherLetters = patternLetters.matcher(input);
  29.             Matcher matcherDigits = patternDigits.matcher(input);
  30.  
  31.             while (matcherLetters.find()) {
  32.                 name.append(matcherLetters.group());
  33.             }
  34.             while (matcherDigits.find()) {
  35.                 distance += Integer.parseInt(matcherDigits.group());
  36.             }
  37.            
  38.             if (participants.contains(name.toString())) {
  39.                 int currentDistance = racersDistances.get(name.toString());
  40.                 racersDistances.put(name.toString(), currentDistance + distance);
  41.             }
  42.             input = sc.nextLine();
  43.         }
  44.  
  45.         List<String> names = new LinkedList<>();
  46.         racersDistances.entrySet()
  47.                 .stream()
  48.                 .sorted(Map.Entry.<String, Integer>comparingByValue().reversed()).limit(3)
  49.                 .forEach(p -> names.add(p.getKey()));
  50.  
  51.         System.out.printf("""
  52.                1st place: %s
  53.                2nd place: %s
  54.                3rd place: %s
  55.                """, names.get(0), names.get(1), names.get(2));
  56.     }
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement