Guest User

Nether Realms

a guest
Mar 27th, 2019
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.03 KB | None | 0 0
  1. package OrderByAge;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6.  
  7. import java.util.*;
  8. import java.util.regex.Matcher;
  9. import java.util.regex.Pattern;
  10. import java.util.stream.Collectors;
  11.  
  12. public class Main {
  13.     public static void main(String[] args) throws IOException {
  14.  
  15.         BufferedReader inputReader =
  16.                 new BufferedReader(
  17.                         new InputStreamReader(System.in
  18.                         ));
  19.  
  20.  
  21.         String[] demons = inputReader.readLine().split(",\\s*");
  22.  
  23.         List<Double> demonDamage = new ArrayList<>();
  24.         TreeMap<String, LinkedHashMap<Integer, Double>> demonsOutput = new TreeMap<>();
  25.  
  26.         for (int i = 0; i < demons.length; i++) {
  27.             String demonName = demons[i];
  28.  
  29.             int demonHealthSum = 0;
  30.             double demonDamageSum = 0.0;
  31.             String demonHealth = "";
  32.  
  33.  
  34.  
  35.             String regexHealth = "[^\\d.+\\/*,-]*";
  36.             Pattern patternHealth = Pattern.compile(regexHealth);
  37.             Matcher matcherHealth = patternHealth.matcher(demonName);
  38.  
  39.             while (matcherHealth.find()) {
  40.                 demonHealth += matcherHealth.group();
  41.             }
  42.             for (int j = 0; j < demonHealth.length(); j++) {
  43.                 demonHealthSum += demonHealth.charAt(j);
  44.             }
  45.  
  46.             String regexDamage = "([-]?[\\d]+[.]?[\\d]*)";
  47.             Pattern patternDamage = Pattern.compile(regexDamage);
  48.             Matcher matcherDamage = patternDamage.matcher(demonName);
  49.  
  50.             while (matcherDamage.find()) {
  51.                 demonDamage.add(Double.parseDouble(matcherDamage.group()));
  52.             }
  53.             for (int j = 0; j < demonDamage.size(); j++) {
  54.                 demonDamageSum += demonDamage.get(j);
  55.             }
  56.  
  57.  
  58.             for (int j = 0; j < demonName.length(); j++) {
  59.                 if (demonName.charAt(j) == '*') {
  60.                     demonDamageSum *= 2;
  61.                 } else if (demonName.charAt(j) == '/') {
  62.                     demonDamageSum /= 2;
  63.                 }
  64.             }
  65.             if (!demonsOutput.containsKey(demonName)) {
  66.                 demonsOutput.put(demonName, new LinkedHashMap<>());
  67.                 demonsOutput.get(demonName).put(demonHealthSum, demonDamageSum);
  68.             } else {
  69.                 demonsOutput.get(demonName).put(demonHealthSum, demonDamageSum);
  70.             }
  71.             demonDamage.clear();
  72.         }
  73.         demonsOutput
  74.                 .entrySet()
  75.                 .stream()
  76.                 .forEach(e -> {
  77.                     System.out.printf
  78.                             ("%s - ",
  79.                                     e.getKey());
  80.                     e.getValue().entrySet().stream().forEach(e1 -> {
  81.                         System.out.println(
  82.                                 String.format(
  83.                                         "%d health, %.2f damage",
  84.                                         e1.getKey(), e1.getValue()));
  85.                     });
  86.  
  87.                 });
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment