Didart

Ranking

Nov 11th, 2021 (edited)
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.67 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class Ranking {
  4.     public static void main(String[] args) {
  5.         Scanner scanner = new Scanner(System.in);
  6.        
  7.         Map<String, String> passwordMap = new LinkedHashMap<>();
  8.         Map<String, Map<String, Integer>> userPointMap = new TreeMap<>();
  9.        
  10.         String input = scanner.nextLine();
  11.  
  12.         while (!"end of contests".equals(input)) {
  13.             String[] element = input.split(":");
  14.             String contest = element[0];
  15.             String password = element[1];
  16.  
  17.             passwordMap.putIfAbsent(contest, password);
  18.  
  19.             input = scanner.nextLine();
  20.         }
  21.  
  22.         input = scanner.nextLine();
  23.         while (!"end of submissions".equals(input)) {
  24.             String[] element = input.split("=>");
  25.             String contest = element[0];
  26.             String password = element[1];
  27.             String name = element[2];
  28.             int points = Integer.parseInt(element[3]);
  29.          
  30.             if (passwordMap.containsKey(contest) && passwordMap.containsValue(password)) {
  31.                 userPointMap.putIfAbsent(name, new LinkedHashMap<>());
  32.                 Map<String, Integer> contestAndPoints = userPointMap.get(name);
  33.                 contestAndPoints.putIfAbsent(contest, 0);
  34.                
  35.                 if (points > userPointMap.get(name).get(contest)) {
  36.                     contestAndPoints.put(contest, points);
  37.                 }
  38.             }
  39.  
  40.             input = scanner.nextLine();
  41.         }
  42.        
  43.         int bestSum = 0;
  44.         for (Map.Entry<String, Map<String, Integer>> bestUser : userPointMap.entrySet()) {
  45.             int sum = bestUser.getValue().values().stream().mapToInt(u -> u).sum();
  46.             if (sum > bestSum) {
  47.                 bestSum = sum;
  48.             }
  49.         }
  50.        
  51.         for (Map.Entry<String, Map<String, Integer>> bestUser : userPointMap.entrySet()) {
  52.             if (bestUser.getValue()
  53.                     .values()
  54.                     .stream()
  55.                     .mapToInt(u -> u)
  56.                     .sum() == bestSum) {
  57.                 System.out.printf("Best candidate is %s with total %d points.%n",
  58.                         bestUser.getKey(), bestSum);
  59.             }
  60.         }
  61.        
  62.         System.out.println("Ranking: ");
  63.         userPointMap
  64.                 .forEach((key, value) -> {
  65.                     System.out.printf("%s%n", key);
  66.                     value.entrySet()
  67.                             .stream()
  68.                             .sorted((c, p) -> p.getValue() - c.getValue())
  69.                             .forEach(u -> System.out.printf("#  %s -> %d%n", u.getKey(), u.getValue()));
  70.                 });
  71.     }
  72. }
  73.  
  74.  
Add Comment
Please, Sign In to add comment