Didart

Nether Realms

Nov 23rd, 2021
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.26 KB | None | 0 0
  1. import java.util.Arrays;
  2. import java.util.Scanner;
  3. import java.util.regex.Matcher;
  4. import java.util.regex.Pattern;
  5.  
  6. public class NetherRealms {
  7.     public static void main(String[] args) {
  8.         Scanner scanner = new Scanner(System.in);
  9.  
  10.         String[] demons = scanner.nextLine().split(", *");
  11.  
  12.         Arrays.sort(demons);
  13.  
  14.         String healthRegex = "[^\\-0-9\\+\\*\\/\\.]*";
  15.         String baseDamageRegex = "[\\-\\+]?([0-9]+)[.]?[0-9]*";
  16.         String symbolsBaseDamage = "[\\/\\*]";
  17.  
  18.         StringBuilder sb = new StringBuilder();
  19.  
  20.         for (String demon : demons) {
  21.             demon = demon.replaceAll(" ", "");
  22.             Pattern pattern = Pattern.compile(healthRegex);
  23.             Matcher matcher = pattern.matcher(demon);
  24.            
  25.             while (matcher.find()) {
  26.                 sb.append(matcher.group());
  27.             }
  28.             String healthString = sb.toString();
  29.             sb.setLength(0);
  30.             int health = 0;
  31.            
  32.             for (int i = 0; i < healthString.length(); i++) {
  33.                 health += healthString.charAt(i);
  34.             }
  35.  
  36.             pattern = Pattern.compile(baseDamageRegex);
  37.             matcher = pattern.matcher(demon);
  38.            
  39.             double damage = 0.0;
  40.             while (matcher.find()) {
  41.                 String group = matcher.group();
  42.                 String sign = "" + group.charAt(0);
  43.                 if (sign.equals("+")) {
  44.                     damage += Double.parseDouble(group.substring(1));
  45.                 } else if (sign.equals("-")) {
  46.                     damage -= Double.parseDouble(group.substring(1));
  47.                 } else {
  48.                     damage += Double.parseDouble(group);
  49.                 }
  50.             }
  51.            
  52.             pattern = Pattern.compile(symbolsBaseDamage);
  53.             matcher = pattern.matcher(demon);
  54.            
  55.             while (matcher.find()) {
  56.                 String manipulator = matcher.group();
  57.                 if (manipulator.equals("*")) {
  58.                     damage *= 2;
  59.                 } else if (manipulator.equals("/")) {
  60.                     damage /= 2;
  61.                 }
  62.             }
  63.             System.out.printf("%s - %d health, %.2f damage%n", demon, health, damage);
  64.         }
  65.     }
  66. }
  67.  
  68.  
Advertisement
Add Comment
Please, Sign In to add comment