NadezhdaGeorgieva

NetherRealms4

Dec 9th, 2020
460
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. public class E05NetherRealms4 {
  2.     public static void main(String[] args) {
  3.         Scanner scanner = new Scanner(System.in);
  4.  
  5.  
  6.         Map<String, Map<Integer, Double>> demons = new TreeMap<>();
  7.  
  8.         String input = scanner.nextLine();
  9.         String[] data = input.split(",\\s*");
  10.  
  11.         String healthRegex = "[^0-9+*/.-]";
  12.         Pattern healthPattern = Pattern.compile(healthRegex);
  13.  
  14.         for (int i = 0; i < data.length; i++) {
  15.  
  16.             String demonName = data[i].replaceAll(" ", "");
  17.             int health = 0;
  18.             Matcher healthMatcher = healthPattern.matcher(demonName);
  19.             String match = "";
  20.             while (healthMatcher.find()) {
  21.                 match = healthMatcher.group();
  22.  
  23.                 for (int j = 0; j < match.length(); j++) {
  24.                     health += match.charAt(j);
  25.                 }
  26.  
  27.             }
  28.             String damageRegex = "[+-]?\\d+\\.?\\d*";
  29.             Pattern damagePattern = Pattern.compile(damageRegex);
  30.             Matcher damageMatcher = damagePattern.matcher(demonName);
  31.             double baseDamage = 0.0;
  32.  
  33.             while (damageMatcher.find()) {
  34.  
  35.  
  36.                 baseDamage +=  Double.parseDouble(damageMatcher.group());
  37.             }
  38.  
  39.             String signRegex = "[*/]";
  40.             Pattern signPattern = Pattern.compile(signRegex);
  41.             Matcher signMatcher = signPattern.matcher(demonName);
  42.  
  43.             while (signMatcher.find()) {
  44.                 if (signMatcher.group().equals("*")) {
  45.                     baseDamage *= 2;
  46.                 } else if (signMatcher.group().equals("/")) {
  47.                     baseDamage /= 2;
  48.                 }
  49.             }
  50.             Map<Integer, Double> demon = new TreeMap<>();
  51.             if (baseDamage != 0) {
  52.                 demon.put(health, baseDamage);
  53.             } else {
  54.                 demon.put(health, 0.0);
  55.             }
  56.  
  57.             demons.put(demonName, demon);
  58.         }
  59.  
  60.         //M3ph-0.5s-0.5t0.0** - 524 health, 8.00 damage
  61.  
  62.         demons.entrySet().forEach(a-> {
  63.             a.getValue().entrySet().stream().forEach(b->{
  64.                 System.out.printf("%s - %d health, %.2f damage%n", a.getKey(),b.getKey(),b.getValue());
  65.             });
  66.         });
  67.     }
  68. }
RAW Paste Data