Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package OrderByAge;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.*;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import java.util.stream.Collectors;
- public class Main {
- public static void main(String[] args) throws IOException {
- BufferedReader inputReader =
- new BufferedReader(
- new InputStreamReader(System.in
- ));
- String[] demons = inputReader.readLine().split(",\\s*");
- List<Double> demonDamage = new ArrayList<>();
- TreeMap<String, LinkedHashMap<Integer, Double>> demonsOutput = new TreeMap<>();
- for (int i = 0; i < demons.length; i++) {
- String demonName = demons[i];
- int demonHealthSum = 0;
- double demonDamageSum = 0.0;
- String demonHealth = "";
- String regexHealth = "[^\\d.+\\/*,-]*";
- Pattern patternHealth = Pattern.compile(regexHealth);
- Matcher matcherHealth = patternHealth.matcher(demonName);
- while (matcherHealth.find()) {
- demonHealth += matcherHealth.group();
- }
- for (int j = 0; j < demonHealth.length(); j++) {
- demonHealthSum += demonHealth.charAt(j);
- }
- String regexDamage = "([-]?[\\d]+[.]?[\\d]*)";
- Pattern patternDamage = Pattern.compile(regexDamage);
- Matcher matcherDamage = patternDamage.matcher(demonName);
- while (matcherDamage.find()) {
- demonDamage.add(Double.parseDouble(matcherDamage.group()));
- }
- for (int j = 0; j < demonDamage.size(); j++) {
- demonDamageSum += demonDamage.get(j);
- }
- for (int j = 0; j < demonName.length(); j++) {
- if (demonName.charAt(j) == '*') {
- demonDamageSum *= 2;
- } else if (demonName.charAt(j) == '/') {
- demonDamageSum /= 2;
- }
- }
- if (!demonsOutput.containsKey(demonName)) {
- demonsOutput.put(demonName, new LinkedHashMap<>());
- demonsOutput.get(demonName).put(demonHealthSum, demonDamageSum);
- } else {
- demonsOutput.get(demonName).put(demonHealthSum, demonDamageSum);
- }
- demonDamage.clear();
- }
- demonsOutput
- .entrySet()
- .stream()
- .forEach(e -> {
- System.out.printf
- ("%s - ",
- e.getKey());
- e.getValue().entrySet().stream().forEach(e1 -> {
- System.out.println(
- String.format(
- "%d health, %.2f damage",
- e1.getKey(), e1.getValue()));
- });
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment