Lyubohd

02. Race

Mar 19th, 2020
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.28 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4.  
  5. public class Main {
  6.     public static void main(String[] args) {
  7.         Scanner scan = new Scanner(System.in);
  8.  
  9.         String[] data = scan.nextLine().split(", ");
  10.         HashMap<String, Integer> results = new LinkedHashMap<>();
  11.         ArrayList<String> racers = new ArrayList<>(Arrays.asList(data));
  12.         Pattern letterPattern = Pattern.compile("[a-z]|[A-Z]");
  13.         Pattern digitPattern = Pattern.compile("[0-9]");
  14.         String input = scan.nextLine();
  15.         while (!"end of race".equals(input)) {
  16.             //G4e@55or%6g6!68e!!@ - George
  17.             Matcher nameMatcher = letterPattern.matcher(input);
  18.             StringBuilder name = new StringBuilder();
  19.             while (nameMatcher.find()) {
  20.                 name.append(nameMatcher.group());
  21.             }
  22.  
  23.             if (racers.contains(name.toString())) {
  24.                 results.putIfAbsent(name.toString(), 0);
  25.                 int oldKm = results.get(name.toString());
  26.                 int newKm = 0;
  27.                 //G4e@55or%6g6!68e!!@ - George
  28.                 Matcher digitMatcher = digitPattern.matcher(input);
  29.                 while (digitMatcher.find()) {
  30.                     newKm += Integer.parseInt(digitMatcher.group());
  31.                 }
  32.  
  33.                 results.put(name.toString(), oldKm + newKm);
  34.             }
  35.  
  36.             input = scan.nextLine();
  37.         }
  38.         int[] number = {1}; // List ->
  39.         results
  40.                 .entrySet()
  41.                 .stream()
  42.                 .sorted((r1, r2) -> r2.getValue().compareTo(r1.getValue()))
  43.                 .limit(3)
  44.                 .forEach(r -> {
  45.                     switch (number[0]) {
  46.                         case 1:
  47.                             System.out.println(String.format("1st place: %s", r.getKey()));
  48.                             break;
  49.                         case 2:
  50.                             System.out.println(String.format("2nd place: %s", r.getKey()));
  51.                             break;
  52.                         case 3:
  53.                             System.out.println(String.format("3rd place: %s", r.getKey()));
  54.                             break;
  55.                     }
  56.                     number[0]++;
  57.                 });
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment