Advertisement
damesova

Nether Realms [Mimi][Tech]

May 6th, 2019
830
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.32 KB | None | 0 0
  1. import java.util.LinkedList;
  2. import java.util.Map;
  3. import java.util.Scanner;
  4. import java.util.TreeMap;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7.  
  8. public class _13_NetherRealms {
  9.     public static void main(String[] args) {
  10.         Scanner scanner = new Scanner(System.in);
  11.         String[] names = scanner.nextLine().split(",");
  12.  
  13.         String regDamage = "((?:-|\\+|)\\d+(?:\\.*?\\d+)*)";
  14.         Pattern p = Pattern.compile(regDamage);
  15.         Map<String, double[]> info = new TreeMap<>();
  16.  
  17.         for (int i = 0; i < names.length; i++) {
  18.  
  19.             double damage = 0;
  20.             double health = 0;
  21.             String currentName = names[i].trim();
  22.  
  23.             damage = getCalcDamage(p, damage, currentName);
  24.             health = getCalcHealth(health, currentName);
  25.  
  26.             info.put(currentName, new double[]{health, damage});
  27.         }
  28.  
  29.         for (Map.Entry<String, double[]> entry : info.entrySet()) {
  30.             System.out.printf("%s - %d health, %.2f damage%n",
  31.                     entry.getKey(), (int)entry.getValue()[0], entry.getValue()[1]);
  32.         }
  33.     }
  34.  
  35.     private static double getCalcDamage(Pattern p, double damage, String current) {
  36.         Matcher m = p.matcher(current);
  37.         LinkedList<String> numsAsString = new LinkedList<>();
  38.         while (m.find()) {
  39.             numsAsString.add(m.group(0));
  40.         }
  41.         for (int i = 0; i < numsAsString.size(); i++) {
  42.             damage += Double.parseDouble(numsAsString.get(i));
  43.         }
  44.  
  45.         int multiplier = current.replaceAll("[^*]", "").length();
  46.         int divisor = current.replaceAll("[^/]", "").length();
  47.         for (int i = 0; i < Math.abs(multiplier - divisor); i++) {
  48.             if (multiplier > divisor) {
  49.                 damage *= 2;
  50.             } else {
  51.                 damage /= 2;
  52.             }
  53.         }
  54.  
  55.         return damage;
  56.     }
  57.  
  58.     private static double getCalcHealth(double health, String current) {
  59.         for (int i = 0; i < current.length(); i++) {
  60.             char charAt = current.charAt(i);
  61.             if (charAt != '+' && charAt != '-'
  62.                     && charAt != '*' && charAt != '/'
  63.                     && charAt != '.' && !Character.isDigit(charAt)) {
  64.  
  65.                 health += charAt;
  66.             }
  67.         }
  68.         return health;
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement