Advertisement
meteor4o

JF-Maps-MoreExercise-03.MOBA(90/100)

Jul 18th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.01 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.*;
  4.  
  5. public class MOBAChallenger {
  6.     public static void main(String[] args) {
  7.         Scanner sc = new Scanner(System.in);
  8.  
  9.         String input = sc.nextLine();
  10.         Map<String, HashMap<String, Integer>> players = new HashMap<>();
  11.         Map<String, Integer> totalSkillPoints = new TreeMap<>();
  12.  
  13.         while (!input.equals("Season end")) {
  14.  
  15.             if (input.contains("->")) {
  16.                 String[] tokens = input.split(" -> ");
  17.                 String name = tokens[0];
  18.                 String position = tokens[1];
  19.                 int skill = Integer.parseInt(tokens[2]);
  20.  
  21.                 if (!players.containsKey(name)) {
  22.                     players.put(name, new HashMap<>());
  23.                     players.get(name).put(position, skill);
  24.  
  25.                 } else {
  26.                     if (players.get(name).containsKey(position)) {
  27.                         int currSkill = players.get(name).get(position);
  28.                         if (skill > currSkill) {
  29.                             players.get(name).put(position, skill);
  30.  
  31.                         }
  32.                     } else {
  33.                         players.get(name).put(position, skill);
  34.  
  35.                     }
  36.                 }
  37.  
  38.             } else if (input.contains(" vs ")) {
  39.                 String[] tokens = input.split(" vs ");
  40.                 String player1 = tokens[0];
  41.                 String player2 = tokens[1];
  42.  
  43.                 boolean commonPosition = false;
  44.                 if (players.containsKey(player1) && players.containsKey(player2)) {
  45.                     for (Map.Entry<String, Integer> entry : players.get(player1).entrySet()) {
  46.                         for (Map.Entry<String, Integer> entry2 : players.get(player2).entrySet()) {
  47.                             if (entry.getKey().equals(entry2.getKey())) {
  48.                                 commonPosition = true;
  49.                             }
  50.                         }
  51.                     }
  52.                     if (commonPosition) {
  53.                         int totalSkillsPlayer1 = 0;
  54.                         int totalSkillsPlayer2 = 0;
  55.                         for (Integer integer : players.get(player1).values()) {
  56.                             totalSkillsPlayer1 += integer;
  57.                         }
  58.  
  59.                         for (Integer integer : players.get(player2).values()) {
  60.                             totalSkillsPlayer2 += integer;
  61.                         }
  62.  
  63.                         if (totalSkillsPlayer1 > totalSkillsPlayer2) {
  64.                             players.remove(player2);
  65.  
  66.                         } else if (totalSkillsPlayer2 > totalSkillsPlayer1) {
  67.                             players.remove(player1);
  68.  
  69.                         }
  70.                     }
  71.  
  72.                 } else {
  73.                     input = sc.nextLine();
  74.                     continue;
  75.                 }
  76.  
  77.             }
  78.             input = sc.nextLine();
  79.         }
  80.  
  81.  
  82.         Map<String, Integer> tempPlayPool = new LinkedHashMap<>();
  83.         players.entrySet().stream().sorted((f, s) -> {
  84.  
  85.             int bestPointsFirst = 0;
  86.             Map<String, Integer> skillF = f.getValue();
  87.             for (Map.Entry<String, Integer> first : skillF.entrySet()) {
  88.                 bestPointsFirst += first.getValue();
  89.             }
  90.             int bestPointsSecond = 0;
  91.             Map<String, Integer> skillS = s.getValue();
  92.             for (Map.Entry<String, Integer> second : skillS.entrySet()) {
  93.                 bestPointsSecond += second.getValue();
  94.             }
  95.             if (bestPointsFirst == bestPointsSecond) {
  96.                 return f.getKey().compareTo(s.getKey());
  97.             } else {
  98.                 return Integer.compare(bestPointsSecond, bestPointsFirst);
  99.             }
  100.         })
  101.                 .forEach(e -> {
  102.                     for (HashMap.Entry<String, HashMap<String, Integer>> entry : players.entrySet()) {
  103.  
  104.                         Map<String, Integer> skill = e.getValue();
  105.                         int sumAll = 0;
  106.                         for (Map.Entry<String, Integer> skillSum : skill.entrySet()) {
  107.                             sumAll += skillSum.getValue();
  108.                         }
  109.                         tempPlayPool.put(e.getKey(), sumAll);
  110.                     }
  111.                 });
  112.         for (Map.Entry<String, Integer> entry : tempPlayPool.entrySet()) {
  113.             System.out.printf("%s: %d skill%n", entry.getKey(), entry.getValue());
  114.             for (HashMap.Entry<String, HashMap<String, Integer>> pool : players.entrySet()) {
  115.                 Map<String, Integer> skill = pool.getValue();
  116.                 skill.entrySet().stream()
  117.                         .sorted((f, s) -> s.getValue().compareTo(f.getValue()))
  118.                         .forEach(e -> {
  119.                             if (entry.getKey().equals(pool.getKey())) {
  120.  
  121.                                 System.out.printf("- %s <::> %d%n", e.getKey(), e.getValue());
  122.                             }
  123.                         });
  124.             }
  125.  
  126.         }
  127.     }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement