Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.03 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.LinkedHashMap;
  5. import java.util.Map;
  6.  
  7. public class Main {
  8.     public static void main(String[] args) throws IOException {
  9.         BufferedReader reader = new BufferedReader(
  10.                 new InputStreamReader(System.in)
  11.         );
  12.  
  13.         int n = Integer.parseInt(reader.readLine());
  14.         Map<String, int[]> heroes = new LinkedHashMap<>();
  15.  
  16.         for (int i = 0; i < n; i++) {
  17.             String[] tokens = reader.readLine().split("\\s+");
  18.             String heroName = tokens[0];
  19.             int health = Integer.parseInt(tokens[1]);
  20.             if (health < 0) {
  21.                 health = 0;
  22.             } else if (health > 100) {
  23.                 health = 100;
  24.             }
  25.             int mana = Integer.parseInt(tokens[2]);
  26.  
  27.             if (mana < 0) {
  28.                 mana = 0;
  29.             } else if (mana > 200) {
  30.                 mana = 200;
  31.             }
  32.  
  33.             heroes.put(heroName, new int[2]);
  34.             heroes.get(heroName)[0] = health;
  35.             heroes.get(heroName)[1] = mana;
  36.         }
  37.  
  38.         String input;
  39.  
  40.         while (!"End".equals(input = reader.readLine())) {
  41.             String[] tokens = input.split(" - ");
  42.             String action = tokens[0];
  43.             String hero = tokens[1];
  44.  
  45.             switch (action) {
  46.                 case "CastSpell":
  47.                     int requiredMana = Integer.parseInt(tokens[2]);
  48.                     String spellName = tokens[3];
  49.                     if (heroes.get(hero)[1] >= requiredMana) {
  50.                         heroes.get(hero)[1] -= requiredMana;
  51.                         System.out.println(String.format("%s has successfully cast %s and now has %d MP!",
  52.                                 hero, spellName, heroes.get(hero)[1]));
  53.                     } else {
  54.                         System.out.println(String.format("%s does not have enough MP to cast %s!",
  55.                                 hero, spellName));
  56.                     }
  57.                     break;
  58.                 case "TakeDamage":
  59.                     int damage = Integer.parseInt(tokens[2]);
  60.                     String attacker = tokens[3];
  61.                     if (heroes.get(hero)[0] > damage) {
  62.                         heroes.get(hero)[0] -= damage;
  63.                         System.out.println(String.format("%s was hit for %d HP by %s and now has %d HP left!",
  64.                                 hero, damage, attacker, heroes.get(hero)[0]));
  65.                     } else {
  66.                         heroes.get(hero)[0] = 0;
  67.                         System.out.println(String.format("%s has been killed by %s!",
  68.                                 hero, attacker));
  69.                     }
  70.                     break;
  71.                 case "Recharge":
  72.                     int manaAmount = Integer.parseInt(tokens[2]);
  73.                     if (heroes.get(hero)[1] < 200) {
  74.                         int recovered = Math.min(200 - heroes.get(hero)[1], manaAmount);
  75.                         heroes.get(hero)[1] += manaAmount;
  76.                         if (heroes.get(hero)[1] > 200) {
  77.                             heroes.get(hero)[1] = 200;
  78.                         }
  79.                         System.out.println(String.format("%s recharged for %d MP!",
  80.                                 hero, recovered));
  81.                     } else {
  82.                         System.out.println(String.format("%s recharged for 0 MP!",
  83.                                 hero));
  84.                     }
  85.                     break;
  86.                 case "Heal":
  87.                     int healAmount = Integer.parseInt(tokens[2]);
  88.                     if (heroes.get(hero)[0] < 100) {
  89.                         int recovered = Math.min(100 - heroes.get(hero)[0], healAmount);
  90.                         heroes.get(hero)[0] += healAmount;
  91.                         if (heroes.get(hero)[0] > 100) {
  92.                             heroes.get(hero)[0] = 100;
  93.                         }
  94.                         System.out.println(String.format("%s healed for %d HP!",
  95.                                 hero, recovered));
  96.                     } else {
  97.                         System.out.println(String.format("%s healed for 0 HP!",
  98.                                 hero));
  99.                     }
  100.                     break;
  101.                 default:
  102.                     break;
  103.             }
  104.         }
  105.  
  106.         heroes.entrySet().stream()
  107.                 .filter(f -> f.getValue()[0] > 0)
  108.                 .sorted((a, b) -> {
  109.                     if (a.getValue()[0] == b.getValue()[0]) {
  110.                         return a.getKey().compareTo(b.getKey());
  111.                     } else {
  112.                         return Integer.compare(b.getValue()[0], a.getValue()[0]);
  113.                     }
  114.                 })
  115.                 .forEach(x -> {
  116.                     System.out.println(x.getKey());
  117.                     System.out.println("HP: " + x.getValue()[0]);
  118.                     System.out.println("MP: " + x.getValue()[1]);
  119.                 });
  120.  
  121.     }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement