Advertisement
Ggodly

JS-Fundamentals-FinalExam-Problem 3

Apr 8th, 2020
1,376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(arr) {
  2.     let heroNumber = Number(arr.shift());
  3.     let heroes = {};
  4.  
  5.     while (heroNumber > 0) {
  6.         let [heroName, health, mana] = arr.shift().split(' ');
  7.         health = Number(health);
  8.         mana = Number(mana);
  9.         heroes[heroName] = { hp: health, mp: mana };
  10.  
  11.         heroNumber--;
  12.     }
  13.  
  14.     let command = arr.shift();
  15.  
  16.     while (command !== 'End') {
  17.         let tokens = command.split(' - ');
  18.  
  19.         switch (tokens[0]) {
  20.             case 'CastSpell': castSpell(tokens[1], tokens[2], tokens[3]); break;
  21.             case 'TakeDamage': takeDamage(tokens[1], tokens[2], tokens[3]); break;
  22.             case 'Recharge': recharge(tokens[1], tokens[2]); break;
  23.             case 'Heal': heal(tokens[1], tokens[2]); break;
  24.         }
  25.  
  26.         command = arr.shift();
  27.     }
  28.  
  29.     function castSpell(heroName, mpNeeded, spellName) {
  30.         mpNeeded = Number(mpNeeded);
  31.  
  32.         if (heroes[heroName].mp - mpNeeded > 0) {
  33.             heroes[heroName].mp -= mpNeeded;
  34.             console.log(`${heroName} has successfully cast ${spellName} and now has ${heroes[heroName].mp} MP!`);
  35.         } else {
  36.             console.log(`${heroName} does not have enough MP to cast ${spellName}!`);
  37.         }
  38.  
  39.     }
  40.  
  41.     function takeDamage(heroName, damage, attacker) {
  42.         damage = Number(damage);
  43.  
  44.         if (heroes[heroName].hp - damage > 0) {
  45.             heroes[heroName].hp -= damage;
  46.             console.log(`${heroName} was hit for ${damage} HP by ${attacker} and now has ${heroes[heroName].hp} HP left!`);
  47.         } else {
  48.             delete heroes[heroName];
  49.             console.log(`${heroName} has been killed by ${attacker}!`);
  50.         }
  51.     }
  52.  
  53.     function recharge(heroName, amount) {
  54.         amount = Number(amount);
  55.  
  56.         if (heroes[heroName].mp + amount > 200) {
  57.             let buff = 200 - heroes[heroName].mp;
  58.             heroes[heroName].mp = 200;
  59.             console.log(`${heroName} recharged for ${buff} MP!`);
  60.         } else {
  61.             heroes[heroName].mp += amount;
  62.             console.log(`${heroName} recharged for ${amount} MP!`);
  63.         }
  64.     }
  65.  
  66.     function heal(heroName, amount) {
  67.         amount = Number(amount);
  68.  
  69.         if (heroes[heroName].hp + amount > 100) {
  70.             let buff = 100 - heroes[heroName].hp;
  71.             heroes[heroName].hp = 100;
  72.             console.log(`${heroName} healed for ${buff} HP!`);
  73.         } else {
  74.             heroes[heroName].hp += amount;
  75.             console.log(`${heroName} healed for ${amount} HP!`);
  76.         }
  77.     }
  78.  
  79.     let nameSort = Object.entries(heroes).sort((a, b) => a[0].localeCompare(b[0]));
  80.     let hpSort = nameSort.sort((a, b) => b[1].hp - a[1].hp);
  81.  
  82.  
  83.     for (let kvp of hpSort) {
  84.         console.log(kvp[0]);
  85.         console.log(`  HP: ${kvp[1].hp}`);
  86.         console.log(`  MP: ${kvp[1].mp}`);
  87.     }
  88. }
  89. solve([
  90.     '2',
  91.     'Solmyr 85 120',
  92.     'Kyrre 99 50',
  93.     'Heal - Solmyr - 10',
  94.     'Recharge - Solmyr - 50',
  95.     'TakeDamage - Kyrre - 66 - Orc',
  96.     'CastSpell - Kyrre - 15 - ViewEarth',
  97.     'End'
  98. ])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement