Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function gameOfEpicness(arrayOfKingdoms, fightingKingdoms) {
- const kingdoms = {};
- arrayOfKingdoms.forEach((element) => {
- const kingdomName = element.kingdom;
- const generalName = element.general;
- const army = +element.army;
- if (!Object.prototype.hasOwnProperty.call(kingdoms, kingdomName)) {
- kingdoms[kingdomName] = {
- [generalName]: { army, wins: 0, losses: 0 },
- };
- } else if (kingdoms[kingdomName].hasOwnProperty([generalName])) {
- kingdoms[kingdomName][generalName].army += army;
- } else {
- kingdoms[kingdomName][generalName] = {
- army,
- wins: 0,
- losses: 0,
- };
- }
- });
- for (const element of fightingKingdoms) {
- const [attackKingdom, attackGeneral, deffendKingdom, deffendGeneral] = element;
- let armyAttack = 0;
- let armyDeffend = 0;
- if (
- kingdoms.hasOwnProperty(attackKingdom)
- && kingdoms.hasOwnProperty(deffendKingdom)
- ) {
- if (kingdoms[attackKingdom] === kingdoms[deffendKingdom]) {
- continue;
- }
- if (
- kingdoms[attackKingdom].hasOwnProperty(attackGeneral)
- && kingdoms[deffendKingdom].hasOwnProperty(deffendGeneral)
- ) {
- armyAttack = kingdoms[attackKingdom][attackGeneral].army;
- armyDeffend = kingdoms[deffendKingdom][deffendGeneral].army;
- }
- }
- if (armyAttack > armyDeffend) {
- kingdoms[attackKingdom][attackGeneral].army = Math.floor(
- armyAttack + armyAttack * 0.1,
- );
- kingdoms[attackKingdom][attackGeneral].wins += 1;
- kingdoms[deffendKingdom][deffendGeneral].army = Math.floor(
- armyDeffend - armyDeffend * 0.1,
- );
- kingdoms[deffendKingdom][deffendGeneral].losses += 1;
- } else if (armyAttack < armyDeffend) {
- kingdoms[deffendKingdom][deffendGeneral].army = Math.floor(
- armyDeffend + armyDeffend * 0.1,
- );
- kingdoms[deffendKingdom][deffendGeneral].wins += 1;
- kingdoms[attackKingdom][attackGeneral].army = Math.floor(
- armyAttack - armyAttack * 0.1,
- );
- kingdoms[attackKingdom][attackGeneral].losses += 1;
- }
- }
- const getTotal = (kingdom, type) => Object.keys(kingdom).reduce((acc, cur) => (acc + kingdom[cur][type]), 0);
- const orderedKingdoms = Object.keys(kingdoms).sort(
- (a, b) => getTotal(kingdoms[b], 'wins') - getTotal(kingdoms[a], 'wins')
- || getTotal(kingdoms[a], 'losses') - getTotal(kingdoms[b], 'losses')
- || a.localeCompare(b),
- );
- const winner = orderedKingdoms[0];
- console.log(`Winner: ${winner}`);
- const generals = Object.keys(kingdoms[winner]).sort(
- (a, b) => kingdoms[winner][b].army - kingdoms[winner][a].army,
- );
- generals.forEach((general) => {
- const info = kingdoms[winner][general];
- console.log(`/\\general: ${general}`);
- console.log(`---army: ${info.army}`);
- console.log(`---wins: ${info.wins}`);
- console.log(`---losses: ${info.losses}`);
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement