SvetlanPetrova

Race SoftUni

Aug 9th, 2021
507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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_02 {
  7.     public static void main(String[] args) {
  8.         Scanner scanner = new Scanner(System.in);
  9.         //"George, Peter, Bill, Tom" -> ", " -> [George, Peter, Bill, Tom]
  10.         List<String> racers = Arrays.stream(scanner.nextLine().split(",\\s+")).collect(Collectors.toList());
  11.         Map<String, Integer> racersDistances = new LinkedHashMap<>();
  12.         //име на състезател -> дистанция (0)
  13.         racers.forEach(racer -> racersDistances.put(racer, 0));
  14.  
  15.         //Регекси
  16.         String regexLetter = "[A-Za-z]+";
  17.         Pattern patternName = Pattern.compile(regexLetter);
  18.  
  19.         String regexNumber = "[0-9]";
  20.         Pattern patternDistance = Pattern.compile(regexNumber);
  21.  
  22.         String input = scanner.nextLine();
  23.         while (!input.equals("end of race")) {
  24.             //"G4e@55or%6g6!68e!!@"
  25.             //всички букви -> име на състезателя
  26.             StringBuilder nameBuilder = new StringBuilder();
  27.             Matcher matcherName = patternName.matcher(input);
  28.             while(matcherName.find()) {
  29.                 nameBuilder.append(matcherName.group());
  30.             }
  31.             //всичи цифри -> сумираме = дистанция на състезателя
  32.             int distance = 0;
  33.             Matcher matcherDistance = patternDistance.matcher(input);
  34.             while(matcherDistance.find()) {
  35.                 distance += Integer.parseInt(matcherDistance.group());
  36.             }
  37.  
  38.             String racerName = nameBuilder.toString();
  39.             if(racersDistances.containsKey(racerName)) {
  40.                 int currentDistance = racersDistances.get(racerName);
  41.                 racersDistances.put(racerName, currentDistance + distance);
  42.             }
  43.  
  44.             input = scanner.nextLine();
  45.         }
  46.  
  47.         //sorting map по descending distance (value)
  48.         /*List<String> firstThreeNames = racersDistances.entrySet().stream()
  49.                 .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) //sorted map by value
  50.                 .limit(3)
  51.                 .map(entry -> entry.getKey())
  52.                 .collect(Collectors.toList());*/
  53.  
  54.         Map<String, Integer> sortedMap = racersDistances.entrySet().stream()
  55.                 .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) //sorted map by value
  56.                 .limit(3)
  57.                 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a1, a2) -> a1, LinkedHashMap::new));
  58.  
  59.         List<String> firstThreeNames = new ArrayList<>();
  60.         sortedMap.entrySet().forEach(entry -> firstThreeNames.add(entry.getKey()));
  61.  
  62.  
  63.         //["George", "Peter", "Pesho"]
  64.         System.out.println("1st place: " + firstThreeNames.get(0));
  65.         System.out.println("2nd place: " + firstThreeNames.get(1));
  66.         System.out.println("3rd place: " + firstThreeNames.get(2));
  67.  
  68.     }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment