desislava_topuzakova

05. Nether Realms

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