Advertisement
Todorov_Stanimir

10. Game Of Epicness Submit a solution

Sep 25th, 2019
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function gameOfEpicness(arrayOfObjects, matrixOfString) {
  2.     let kingdoms = {};
  3.     for (let kingdom of arrayOfObjects) {
  4.         if (!kingdoms[kingdom.kingdom]) {
  5.             kingdoms[kingdom.kingdom] = {};
  6.             kingdoms[kingdom.kingdom][kingdom.general] = { army: kingdom.army, wins: 0, losses: 0 }
  7.         } else {
  8.             if (!kingdoms[kingdom.kingdom][kingdom.general]) {
  9.                 kingdoms[kingdom.kingdom][kingdom.general] = { army: kingdom.army, wins: 0, losses: 0 }
  10.             } else {
  11.                 kingdoms[kingdom.kingdom][kingdom.general].army += kingdom.army;
  12.             }
  13.         }
  14.     }
  15.     for (let line of matrixOfString) {
  16.         let [attackingKingdom, attackingGeneral, defendingKingdom, defendingGeneral] = line;
  17.         if (attackingKingdom !== defendingKingdom && kingdoms[attackingKingdom][attackingGeneral] &&
  18.             kingdoms[defendingKingdom][defendingGeneral]) {
  19.             if (kingdoms[attackingKingdom][attackingGeneral].army > kingdoms[defendingKingdom][defendingGeneral].army) {
  20.                 kingdoms[attackingKingdom][attackingGeneral].army += 0.10 * kingdoms[attackingKingdom][attackingGeneral].army;
  21.                 kingdoms[attackingKingdom][attackingGeneral].army = parseInt(kingdoms[attackingKingdom][attackingGeneral].army);
  22.                 kingdoms[attackingKingdom][attackingGeneral].wins++;
  23.                 kingdoms[defendingKingdom][defendingGeneral].army -= 0.10 * kingdoms[defendingKingdom][defendingGeneral].army;
  24.                 kingdoms[defendingKingdom][defendingGeneral].army = parseInt(kingdoms[defendingKingdom][defendingGeneral].army);
  25.                 kingdoms[defendingKingdom][defendingGeneral].losses++;
  26.             } else if (kingdoms[attackingKingdom][attackingGeneral].army < kingdoms[defendingKingdom][defendingGeneral].army) {
  27.                 kingdoms[attackingKingdom][attackingGeneral].army -= 0.10 * kingdoms[attackingKingdom][attackingGeneral].army;
  28.                 kingdoms[attackingKingdom][attackingGeneral].army = parseInt(kingdoms[attackingKingdom][attackingGeneral].army);
  29.                 kingdoms[attackingKingdom][attackingGeneral].losses++;
  30.                 kingdoms[defendingKingdom][defendingGeneral].army += 0.10 * kingdoms[defendingKingdom][defendingGeneral].army;
  31.                 kingdoms[defendingKingdom][defendingGeneral].army = parseInt(kingdoms[defendingKingdom][defendingGeneral].army);
  32.                 kingdoms[defendingKingdom][defendingGeneral].wins++;
  33.             }
  34.         }
  35.     }
  36.     let winsKingdom = Object.entries(kingdoms).sort((a, b) => {
  37.         let totalWinsA = Object.entries(a[1]).map(el => { return el[1].wins }).reduce((x, y) => x + y, 0);
  38.         let totalWinsB = Object.entries(b[1]).map(el => { return el[1].wins }).reduce((x, y) => x + y, 0);
  39.         let totalLossesA = Object.entries(a[1]).map(el => { return el[1].losses }).reduce((x, y) => x + y, 0);
  40.         let totalLossesB = Object.entries(b[1]).map(el => { return el[1].losses }).reduce((x, y) => x + y, 0);
  41.         return totalWinsB - totalWinsA || totalLossesA - totalLossesB || a[0].localeCompare(b[0])
  42.     })[0];
  43.  
  44.     winsKingdom.forEach((element, index) => {
  45.         if (index === 0) {
  46.             console.log(`Winner: ${winsKingdom[0]}`)
  47.         } else {
  48.             Object.entries(element)
  49.                 .sort((generalA, generalB) => generalB[1].army - generalA[1].army)
  50.                 .forEach(general => {
  51.                     console.log(`/\\general: ${general[0]}`);
  52.                     console.log(`---army: ${general[1].army}`);
  53.                     console.log(`---wins: ${general[1].wins}`);
  54.                     console.log(`---losses: ${general[1].losses}`);
  55.                 });
  56.         }
  57.     });
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement