Advertisement
desislava_topuzakova

02. Race

Jul 24th, 2022
1,301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.25 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_02 {
  7.     public static void main(String[] args) {
  8.         Scanner scanner = new Scanner(System.in);
  9.         //"George, Peter, Bill, Tom".split(", ") ->
  10.         // масив: ["George", "Peter", "Bill", "Tom"]  ->
  11.         // лист: {"George", "Peter", "Bill", "Tom"}
  12.         String names = scanner.nextLine();
  13.         List<String> racersNames = Arrays.stream(names.split(", ")).collect(Collectors.toList()); //списък с имената на състезателите
  14.         //състазател -> дистанция
  15.         Map<String, Integer> racersDistances = new LinkedHashMap<>();
  16.         racersNames.forEach(name -> racersDistances.put(name, 0));
  17.  
  18.         //Regex
  19.         String regexLetters = "[A-Za-z]+";
  20.         Pattern patternLetter = Pattern.compile(regexLetters);
  21.  
  22.         String regexDigit = "[0-9]";
  23.         Pattern patternDigit = Pattern.compile(regexDigit);
  24.  
  25.         String input = scanner.nextLine();
  26.         while (!input.equals("end of race")) {
  27.             //input = "G!32e%o7r#32g$235@!2e"
  28.             //име на състезателя -> само от буквите
  29.             StringBuilder nameBuilder = new StringBuilder();
  30.             Matcher matcherLetter = patternLetter.matcher(input); //всички букви -> ["G", "e", "o", "r", "g", "e"]
  31.             while (matcherLetter.find()) {
  32.                 nameBuilder.append(matcherLetter.group());
  33.             }
  34.  
  35.             //дистанция на състезателя -> сума от цифрите
  36.             int distance = 0;
  37.             Matcher matcherDigit = patternDigit.matcher(input); // всички цифри -> ["3", "2", "7", "3", "2", ...]
  38.             while (matcherDigit.find()) {
  39.                 distance += Integer.parseInt(matcherDigit.group());
  40.             }
  41.  
  42.  
  43.             //добавя дистанцията на определения състезател
  44.             String racerName = nameBuilder.toString(); //име на състезателя
  45.             if (racersDistances.containsKey(racerName)) {
  46.                 int currentDistance = racersDistances.get(racerName);
  47.                 racersDistances.put (racerName, currentDistance + distance);
  48.             }
  49.  
  50.             input = scanner.nextLine();
  51.         }
  52.  
  53.         //състезател -> дистанция
  54.         //George -> 55
  55.         //Peter -> 25
  56.         //Bill -> 11
  57.  
  58.         List<String> nameOfFirstThree = racersDistances.entrySet().stream()
  59.                 .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) //сортирам записите по value (дистанция) в намаляващ ред
  60.                 .limit(3) //взима първите 3 записа от мап
  61.                 .map(entry -> entry.getKey()) //на всеки запис взимам ключ (име на играч)
  62.                 .collect(Collectors.toList()); //{"George", "Peter", "Bill"}
  63.  
  64.         System.out.println("1st place: " + nameOfFirstThree.get(0));
  65.         System.out.println("2nd place: " + nameOfFirstThree.get(1));
  66.         System.out.println("3rd place: " + nameOfFirstThree.get(2));
  67.  
  68.  
  69.  
  70.     }
  71. }
  72.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement