Advertisement
tripTiPscout

05. Dragon Army

Jun 16th, 2022
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.30 KB | None | 0 0
  1. package Fundamentals;
  2.  
  3. import java.util.*;
  4.  
  5. public class Main {
  6.  
  7.     public static void main(String[] args) {
  8.         Scanner scanner = new Scanner(System.in);
  9.  
  10.         int lines = Integer.parseInt(scanner.nextLine());
  11.  
  12.         Map<String, Map<String, int[]>> dragons = new LinkedHashMap<>();
  13.  
  14.         for (int i = 1; i <= lines; i++) {
  15.             String[] dragonData = scanner.nextLine().split(" ");
  16.  
  17.             String type = dragonData[0];
  18.             String name = dragonData[1];
  19.             int damage = dragonData[2].equals("null") ? 45 : Integer.parseInt(dragonData[2]);
  20.             int health = dragonData[3].equals("null") ? 250 : Integer.parseInt(dragonData[3]);
  21.             int armor = dragonData[4].equals("null") ? 10 : Integer.parseInt(dragonData[4]);
  22.  
  23.             Map<String, int[]> nameAndStats = new TreeMap<>();
  24.             int[] stats = new int[3];
  25.             stats[0] = damage;
  26.             stats[1] = health;
  27.             stats[2] = armor;
  28.             nameAndStats.put(name, stats);
  29.  
  30.             if (!dragons.containsKey(type)) {
  31.                 dragons.put(type, nameAndStats);
  32.             } else {
  33.                 dragons.get(type).remove(name);
  34.                 dragons.get(type).put(name, stats);
  35.             }
  36.         }
  37.  
  38.         Map<String, String> averageStatsForType = new LinkedHashMap<>();
  39.  
  40.         getAverageStats(dragons, averageStatsForType);
  41.  
  42.         printDragons(dragons, averageStatsForType);
  43.  
  44.     }
  45.  
  46.     private static void printDragons(Map<String, Map<String, int[]>> dragons, Map<String, String> averageStatsForType) {
  47.         for (Map.Entry<String, String> typeStats : averageStatsForType.entrySet()) {
  48.             for (Map.Entry<String, Map<String, int[]>> dragonType : dragons.entrySet()) {
  49.                 if (dragonType.getKey().equals(typeStats.getKey())) {
  50.                     System.out.printf("%s%s\n", typeStats.getKey(), typeStats.getValue());
  51.                     dragonType.getValue().forEach((k, v) -> {
  52.                         int i1 = 0;
  53.                         int i2 = 0;
  54.                         int i3 = 0;
  55.                         for (int i = 0; i < v.length; i++) {
  56.                             if (i == 0) {
  57.                                 i1 = v[i];
  58.                             } else if (i == 1) {
  59.                                 i2 = v[i];
  60.                             } else {
  61.                                 i3 = v[i];
  62.                             }
  63.                         }
  64.                         System.out.printf("-%s -> damage: %d, health: %d, armor: %d\n", k, i1, i2, i3);
  65.                     });
  66.                 }
  67.             }
  68.         }
  69.     }
  70.  
  71.     private static void getAverageStats(Map<String, Map<String, int[]>> dragons, Map<String, String> averageStatsForType) {
  72.         for (String dragonType : dragons.keySet()) {
  73.             double result1 = 0;
  74.             double result2 = 0;
  75.             double result3 = 0;
  76.             for (Map.Entry<String, Map<String, int[]>> entry : dragons.entrySet()) {
  77.                 if (entry.getKey().equals(dragonType)) {
  78.                     int currentStatSum = entry.getValue().values().stream().map(e -> e[0]).mapToInt(e -> e).sum();
  79.                     int size = entry.getValue().values().size();
  80.                     result1 = 1.0 * currentStatSum / size;
  81.                 }
  82.             }
  83.             for (Map.Entry<String, Map<String, int[]>> entry : dragons.entrySet()) {
  84.                 if (entry.getKey().equals(dragonType)) {
  85.                     int currentStatSum = entry.getValue().values().stream().map(e -> e[1]).mapToInt(e -> e).sum();
  86.                     int size = entry.getValue().values().size();
  87.                     result2 = 1.0 * currentStatSum / size;
  88.                 }
  89.             }
  90.             for (Map.Entry<String, Map<String, int[]>> entry : dragons.entrySet()) {
  91.                 if (entry.getKey().equals(dragonType)) {
  92.                     int currentStatSum = entry.getValue().values().stream().map(e -> e[2]).mapToInt(e -> e).sum();
  93.                     int size = entry.getValue().values().size();
  94.                     result3 = 1.0 * currentStatSum / size;
  95.                 }
  96.             }
  97.             String averageStats = String.format("::(%.2f/%.2f/%.2f)", result1, result2, result3);
  98.             averageStatsForType.put(dragonType, averageStats);
  99.         }
  100.     }
  101.  
  102. }
  103.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement