Advertisement
Guest User

Game of Epicness

a guest
Sep 30th, 2020
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(kingdomsData = [], generals = []) {
  2.   let kingdoms = kingdomsData.slice()
  3.                              .reduce((acc, obj) => {
  4.                                if (!acc.has(obj.kingdom)) {
  5.                                  acc.set(obj.kingdom, new Map([[obj.general, { army: obj.army, wins: 0, losses: 0 }]]));
  6.                                  return acc;
  7.                                }
  8.  
  9.                                let currentKingdom = acc.get(obj.kingdom);
  10.                                if (!currentKingdom.has(obj.general)) {
  11.                                  currentKingdom.set(obj.general, { army: obj.army, wins: 0, losses: 0 });
  12.                                  return acc;
  13.                                }
  14.  
  15.                                currentKingdom.get(obj.general).army += obj.army;
  16.                                return acc;
  17.                              }, new Map());
  18.  
  19.   for (let i = 0; i < generals.length; i++) {
  20.     if (generals[i][0] === generals[i][2]) {
  21.       continue;
  22.     }
  23.  
  24.     let attackingGeneral = kingdoms.get(generals[i][0]).get(generals[i][1]);
  25.     let defendingGeneral = kingdoms.get(generals[i][2]).get(generals[i][3]);
  26.     if (attackingGeneral.army === defendingGeneral.army) {
  27.       continue;
  28.     } else if (attackingGeneral.army > defendingGeneral.army) {
  29.       attackingGeneral.army = Math.floor(attackingGeneral.army * 1.10);
  30.       attackingGeneral.wins++;
  31.       defendingGeneral.army = Math.floor(defendingGeneral.army * 0.90);
  32.       defendingGeneral.losses++;
  33.     } else if (attackingGeneral.army < defendingGeneral.army) {
  34.       attackingGeneral.army = Math.floor(attackingGeneral.army * 0.90);
  35.       attackingGeneral.losses++;
  36.       defendingGeneral.army = Math.floor(defendingGeneral.army * 1.10);
  37.       defendingGeneral.wins++;
  38.     }
  39.   }
  40.  
  41.   kingdoms = new Map([...kingdoms].sort((a, b) => [...b[1]].reduce((wins, general) => wins + general[1].wins, 0) -
  42.                                                   [...a[1]].reduce((wins, general) => wins + general[1].wins, 0)) ||
  43.                                                   [...a[1]].reduce((losses, general) => losses + general[1].losses, 0) -
  44.                                                   [...b[1]].reduce((losses, general) => losses + general[1].losses, 0) ||
  45.                                                   a[0].localeCompare(b[0]));
  46.  
  47.   let winner = kingdoms.entries().next().value;
  48.   let output = `Winner: ${winner[0]}\n`;
  49.   for (let [general, army] of [...winner[1]].sort((a, b) => b[1].army - a[1].army)) {
  50.     output += `/\\general: ${general}\n---army: ${army.army}\n---wins: ${army.wins}\n---losses: ${army.losses}\n`;
  51.   }
  52.  
  53.   return output.trim();
  54. }
  55.  
  56. // Don't copy the calling of the function in judge, you won't get any points, just the code above
  57. console.log(solve([ { kingdom: "Maiden Way", general: "Merek", army: 5000 },
  58.                     { kingdom: "Stonegate", general: "Ulric", army: 4900 },
  59.                     { kingdom: "Stonegate", general: "Doran", army: 70000 },
  60.                     { kingdom: "YorkenShire", general: "Quinn", army: 0 },
  61.                     { kingdom: "YorkenShire", general: "Quinn", army: 2000 },
  62.                     { kingdom: "Maiden Way", general: "Berinon", army: 100000 } ],
  63.                   [ ["YorkenShire", "Quinn", "Stonegate", "Ulric"],
  64.                     ["Stonegate", "Ulric", "Stonegate", "Doran"],
  65.                     ["Stonegate", "Doran", "Maiden Way", "Merek"],
  66.                     ["Stonegate", "Ulric", "Maiden Way", "Merek"],
  67.                     ["Maiden Way", "Berinon", "Stonegate", "Ulric"] ]));
  68.  
  69. console.log(solve([ { kingdom: "Stonegate", general: "Ulric", army: 5000 },
  70.                     { kingdom: "YorkenShire", general: "Quinn", army: 5000 },
  71.                     { kingdom: "Maiden Way", general: "Berinon", army: 1000 } ],
  72.                   [ ["YorkenShire", "Quinn", "Stonegate", "Ulric"],
  73.                     ["Maiden Way", "Berinon", "YorkenShire", "Quinn"] ]));
  74.  
  75. console.log(solve([ { kingdom: "Maiden Way", general: "Merek", army: 5000 },
  76.                     { kingdom: "Stonegate", general: "Ulric", army: 4900 },
  77.                     { kingdom: "Stonegate", general: "Doran", army: 70000 },
  78.                     { kingdom: "YorkenShire", general: "Quinn", army: 0 },
  79.                     { kingdom: "YorkenShire", general: "Quinn", army: 2000 } ],
  80.                   [ ["YorkenShire", "Quinn", "Stonegate", "Doran"],
  81.                     ["Stonegate", "Ulric", "Maiden Way", "Merek"] ]));
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement