Didart

Race

Nov 22nd, 2021
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.14 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4. import java.util.stream.Collectors;
  5.  
  6. public class Race {
  7.     public static void main(String[] args) {
  8.         Scanner scanner = new Scanner(System.in);
  9.  
  10.         List<String> racers = Arrays.stream(scanner.nextLine().split(", "))
  11.                 .collect(Collectors.toList());
  12.  
  13.         Map<String, Integer> racersDistances = new LinkedHashMap<>();
  14.  
  15.         racers.forEach(racer -> racersDistances.put(racer, 0));
  16.  
  17.         //   G!32e%o7r#32g$235@!2e
  18.         String regexLetter = "[A-Za-z]+";
  19.         Pattern patternLetter = Pattern.compile(regexLetter);
  20.  
  21.         String regexDigit = "[0-9]";
  22.         Pattern patternDigit = Pattern.compile(regexDigit);
  23.  
  24.         String input = scanner.nextLine();
  25.  
  26.         while (!input.equals("end of race")) {
  27.  
  28.             StringBuilder nameBuilder = new StringBuilder();
  29.             Matcher matcherName = patternLetter.matcher(input);
  30.  
  31.             while (matcherName.find()) {
  32.                 nameBuilder.append(matcherName.group());
  33.             }
  34.             int distance = 0;
  35.             Matcher matcherDigit = patternDigit.matcher(input);
  36.  
  37.             while (matcherDigit.find()) {
  38.                 distance += Integer.parseInt(matcherDigit.group());
  39.             }
  40.             String racerName = nameBuilder.toString();
  41.  
  42.             if (racersDistances.containsKey(racerName)) {
  43.                 int currentDistance = racersDistances.get(racerName);
  44.                 racersDistances.put(racerName, currentDistance + distance);
  45.             }
  46.             input = scanner.nextLine();
  47.         }
  48.                 List<String> firstThreeNames = racersDistances
  49.                 .entrySet()
  50.                 .stream()
  51.                 .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
  52.                 .limit(3)
  53.                 .map(entry -> entry.getKey())
  54.                 .collect(Collectors.toList());
  55.  
  56.         System.out.println("1st place: " + firstThreeNames.get(0));
  57.         System.out.println("2nd place: " + firstThreeNames.get(1));
  58.         System.out.println("3rd place: " + firstThreeNames.get(2));
  59.     }
  60. }
  61.  
Advertisement
Add Comment
Please, Sign In to add comment