Advertisement
Guest User

Untitled

a guest
Oct 18th, 2017
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.55 KB | None | 0 0
  1.  
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.HashMap;
  7. import java.util.LinkedHashMap;
  8. import java.util.Map;
  9. import java.util.stream.Collectors;
  10.  
  11. public class test {
  12.     public static void main(String[] args) throws IOException {
  13.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  14.  
  15.         LinkedHashMap<String, LinkedHashMap<String, Long>> playersScores = new LinkedHashMap<>();
  16.         String line = reader.readLine();
  17.         Integer id = 0;
  18.  
  19.         while(!line.equalsIgnoreCase("osu!")){
  20.  
  21.             String[] opponents = line.split("<->");
  22.             String firstPlayer = opponents[0].split("\\s+")[1];
  23.             String secondPlayer = opponents[1].split("\\s+")[0];
  24.             Long firstScore = Long.valueOf(opponents[0].split("\\s+")[0]);
  25.             Long secondScore = Long.valueOf(opponents[1].split("\\s+")[1]);
  26.  
  27.             if (!playersScores.containsKey(firstPlayer)) {
  28.                 playersScores.put(firstPlayer, new LinkedHashMap<>());
  29.             }
  30.  
  31.             id++;
  32.  
  33.             playersScores.get(firstPlayer).put(secondPlayer+"("+id+")", firstScore - secondScore);
  34.  
  35.             if (!playersScores.containsKey(secondPlayer)) {
  36.                 playersScores.put(secondPlayer, new LinkedHashMap<>());
  37.             }
  38.             playersScores.get(secondPlayer).put(firstPlayer+"("+id+")", secondScore - firstScore);
  39.  
  40.             id++;
  41.             line = reader.readLine();
  42.         }
  43.  
  44.         playersScores = playersScores.entrySet().stream().sorted((a,b) -> {
  45.             Long firstScore = getAllScores(a.getValue());
  46.             Long secondScore = getAllScores(b.getValue());
  47.  
  48.             return Long.compare(secondScore, firstScore);
  49.         }).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(oldValue, newValue)->oldValue, LinkedHashMap::new));
  50.  
  51.         for (Map.Entry<String, LinkedHashMap<String, Long>> player : playersScores.entrySet()) {
  52.             System.out.printf("%s - (%d)%n",player.getKey(), getAllScores(player.getValue()));
  53.  
  54.             for (Map.Entry<String,Long> oponent : player.getValue().entrySet()) {
  55.                 System.out.printf("*   %s <-> %d%n",oponent.getKey().substring(0,oponent.getKey().indexOf("(")), oponent.getValue());
  56.             }
  57.         }
  58.  
  59.     }
  60.  
  61.     private static Long getAllScores(LinkedHashMap<String, Long> map){
  62.  
  63.         Long result = 0L;
  64.         for (Long integer : map.values()) {
  65.             result += integer;
  66.         }
  67.  
  68.         return result;
  69.     }
  70.  
  71.  
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement