Advertisement
Danny_Berova

10.GameOfEpicness

Oct 7th, 2018
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function calcWinner(data, battles) {
  2.     let kingdoms = {};
  3.     for (let kingdomData of data) {
  4.         let king = kingdomData.kingdom;
  5.         let generalVal = kingdomData.general;
  6.         let armyVal = +kingdomData.army;
  7.         if(!kingdoms.hasOwnProperty(king)) {
  8.             kingdoms[king] = {};
  9.             kingdoms[king].kingdomName = king;
  10.             kingdoms[king].wins = 0;
  11.             kingdoms[king].losses = 0;
  12.             kingdoms[king].generals = {};
  13.         }
  14.  
  15.         if(!kingdoms[king].generals.hasOwnProperty(generalVal)) {
  16.             kingdoms[king].generals[generalVal] = {};
  17.             kingdoms[king].generals[generalVal].army = 0;
  18.         }
  19.         kingdoms[king].generals[generalVal].army += armyVal;
  20.         kingdoms[king].generals[generalVal].wins = 0;
  21.         kingdoms[king].generals[generalVal].losses = 0;
  22.     }
  23.  
  24.     for (let line of battles) {
  25.         let [attackKing, attackGen, defendKing, defendGen] = line;
  26.         let attackArmy = kingdoms[attackKing].generals[attackGen].army;
  27.         let defendArmy = kingdoms[defendKing].generals[defendGen].army;
  28.            
  29.         if(attackKing !== defendKing
  30.             && kingdoms[attackKing].generals.hasOwnProperty(attackGen)
  31.             && kingdoms[defendKing].generals.hasOwnProperty(defendGen)
  32.             && attackArmy !== defendArmy) {
  33.                 if (attackArmy > defendArmy) {
  34.                     processBattle(attackKing, attackGen, attackArmy, defendKing, defendGen, defendArmy);                    
  35.                 } else {
  36.                     processBattle(defendKing, defendGen, defendArmy, attackKing, attackGen, attackArmy)                }
  37.         }
  38.     }
  39.     function processBattle(attackKing, attackGen, attackArmy, defendKing, defendGen, defendArmy) {
  40.         kingdoms[attackKing].generals[attackGen].army =Math.floor(1.1 * attackArmy);
  41.         kingdoms[attackKing].generals[attackGen].wins += 1;
  42.         kingdoms[attackKing].wins += 1;
  43.         kingdoms[defendKing].generals[defendGen].army =Math.max(Math.floor(0.9 * defendArmy), 0);
  44.         kingdoms[defendKing].generals[defendGen].losses += 1;
  45.         kingdoms[defendKing].losses += 1;
  46.  
  47.     }
  48.  
  49.     let winningKingdom = Object.values(kingdoms).sort((a, b) => b.wins - a.wins
  50.         || a.losses - b.losses
  51.         || a.kingdomName.localeCompare(b.kingdomName))[0];
  52.     let result = [];
  53.     result.push(`Winner: ${winningKingdom.kingdomName}`);
  54.  
  55.     let sortedGenerals = Object.keys(winningKingdom.generals).sort((a, b) =>
  56.         winningKingdom.generals[b].army -winningKingdom.generals[a].army);
  57.  
  58.     for (let gen of sortedGenerals) {
  59.         result.push(`/\\general: ${gen}`);
  60.         result.push(`---army: ${winningKingdom.generals[gen]['army']}`);
  61.         result.push(`---wins: ${winningKingdom.generals[gen]['wins']}`);
  62.         result.push(`---losses: ${winningKingdom.generals[gen]['losses']}`);
  63.     }
  64.     return result.join('\n');
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement