Advertisement
Guest User

Game of Epicness

a guest
Apr 1st, 2020
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(arrayOfKingdoms, fightingKingdoms) {
  2.     let kingdoms = {};
  3.  
  4.     for (let element of arrayOfKingdoms) {
  5.         let kingdomName = element.kingdom;
  6.         let generalName = element.general;
  7.         let army = +element.army;
  8.  
  9.         if (!kingdoms.hasOwnProperty(kingdomName)) {
  10.             kingdoms[kingdomName] = {
  11.                 [generalName]: { army, wins: 0, losses: 0 }
  12.             };
  13.         } else {
  14.             if (kingdoms[kingdomName].hasOwnProperty([generalName])) {
  15.                 kingdoms[kingdomName][generalName].army += army;
  16.             } else {
  17.                 kingdoms[kingdomName][generalName] = {
  18.                     army,
  19.                     wins: 0,
  20.                     losses: 0
  21.                 };
  22.             }
  23.         }
  24.     }
  25.  
  26.     for (let element of fightingKingdoms) {
  27.         let attackKingdom = element[0];
  28.         let attackGeneral = element[1];
  29.         let deffendKingdom = element[2];
  30.         let deffendGeneral = element[3];
  31.         let armyAttack = 0;
  32.         let armyDeffend = 0;
  33.  
  34.         if (
  35.             kingdoms.hasOwnProperty(attackKingdom) &&
  36.             kingdoms.hasOwnProperty(deffendKingdom)
  37.         ) {
  38.             if (kingdoms[attackKingdom] === kingdoms[deffendKingdom]) {
  39.                 continue;
  40.             }
  41.             if (
  42.                 kingdoms[attackKingdom].hasOwnProperty(attackGeneral) &&
  43.                 kingdoms[deffendKingdom].hasOwnProperty(deffendGeneral)
  44.             ) {
  45.                 armyAttack = kingdoms[attackKingdom][attackGeneral].army;
  46.                 armyDeffend = kingdoms[deffendKingdom][deffendGeneral].army;
  47.             }
  48.         }
  49.  
  50.         if (armyAttack > armyDeffend) {
  51.             kingdoms[attackKingdom][attackGeneral].army = Math.floor(
  52.                 armyAttack + armyAttack * 0.1
  53.             );
  54.             kingdoms[attackKingdom][attackGeneral].wins += 1;
  55.             kingdoms[deffendKingdom][deffendGeneral].army = Math.floor(
  56.                 armyDeffend - armyDeffend * 0.1
  57.             );
  58.             kingdoms[deffendKingdom][deffendGeneral].losses += 1;
  59.         } else if (armyAttack < armyDeffend) {
  60.             kingdoms[deffendKingdom][deffendGeneral].army = Math.floor(
  61.                 armyDeffend + armyDeffend * 0.1
  62.             );
  63.             kingdoms[deffendKingdom][deffendGeneral].wins += 1;
  64.             kingdoms[attackKingdom][attackGeneral].army = Math.floor(
  65.                 armyAttack - armyAttack * 0.1
  66.             );
  67.             kingdoms[attackKingdom][attackGeneral].losses += 1;
  68.         }
  69.     }
  70.     // order and print
  71.     let orderedKingdoms = Object.keys(kingdoms).sort(
  72.         (a, b) =>
  73.             getTotal(kingdoms[b], 'wins') - getTotal(kingdoms[a], 'wins') ||
  74.             getTotal(kingdoms[a], 'losses') - getTotal(kingdoms[b], 'losses') ||
  75.             a.localeCompare(b)
  76.     );
  77.     let winner = orderedKingdoms[0];
  78.     console.log(`Winner: ${winner}`);
  79.     let generals = Object.keys(kingdoms[winner]).sort(
  80.         (a, b) => kingdoms[winner][b].army - kingdoms[winner][a].army
  81.     );
  82.     generals.forEach(general => {
  83.         let info = kingdoms[winner][general];
  84.         console.log(`/\\general: ${general}`);
  85.         console.log(`---army: ${info.army}`);
  86.         console.log(`---wins: ${info.wins}`);
  87.         console.log(`---losses: ${info.losses}`);
  88.     });
  89.  
  90.     function getTotal(kingdom, type) {
  91.         return Object.keys(kingdom).reduce((acc, cur) => (acc + kingdom[cur][type]), 0);
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement