Advertisement
Merry123

Untitled

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