Advertisement
desislava_topuzakova

02. Race

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