Ivankooo1

04. Game of Epicness

Apr 1st, 2020
244
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.  
  6.         let kingdomName = element.kingdom;
  7.         let generalName = element.general;
  8.         let army = +element.army;
  9.        
  10.  
  11.         if(!kingdoms.hasOwnProperty(kingdomName)){
  12.             kingdoms[kingdomName] = {
  13.                 [generalName]: {army,wins:0,losses:0}
  14.             }
  15.         }else{
  16.             if(kingdoms[kingdomName].hasOwnProperty([generalName])){
  17.                 kingdoms[kingdomName][generalName].army += army;
  18.             }else{
  19.                 kingdoms[kingdomName][generalName] = {army,wins:0,losses:0};
  20.             }
  21.         }
  22.     }
  23.    
  24.  
  25.     for(let element of fightingKingdoms){
  26.         let attackKingdom = element[0];
  27.         let attackGeneral = element[1];
  28.         let deffendKingdom = element[2];
  29.         let deffendGeneral = element[3];
  30.         let armyAttack = 0;
  31.         let armyDeffend = 0;
  32.  
  33.         if(kingdoms.hasOwnProperty(attackKingdom) && kingdoms.hasOwnProperty(deffendKingdom)){
  34.           if(kingdoms[attackKingdom] === kingdoms[deffendKingdom]){
  35.               continue;
  36.           }
  37.           if(kingdoms[attackKingdom].hasOwnProperty(attackGeneral) && kingdoms[deffendKingdom].hasOwnProperty(deffendGeneral)){
  38.              armyAttack = kingdoms[attackKingdom][attackGeneral].army;  
  39.              armyDeffend = kingdoms[deffendKingdom][deffendGeneral].army;
  40.           }
  41.         }
  42.  
  43.         let attack = kingdoms[attackKingdom][attackGeneral];
  44.         let deffend = kingdoms[deffendKingdom][deffendGeneral];
  45.  
  46.        
  47.         if(armyAttack > armyDeffend){
  48.             attack.army = Math.floor(armyAttack + (armyAttack * 0.10));
  49.             attack.wins += 1;
  50.             deffend.army = Math.floor(armyDeffend - (armyDeffend  * 0.10));
  51.             deffend.losses += 1;
  52.         }
  53.        
  54.      
  55.         else if(armyAttack < armyDeffend){
  56.             deffend.army = Math.floor(armyDeffend + (armyDeffend * 0.10));
  57.             deffend.wins += 1;
  58.             attack.army = Math.floor(armyAttack - (armyAttack * 0.10));
  59.             attack.losses += 1;
  60.         }
  61.        
  62.        
  63.     }
  64.  
  65.     let findKingdom = Object.keys(kingdoms).sort((a,b) =>
  66.        getTotal(kingdoms[b], 'wins') - getTotal(kingdoms[a],'wins') ||
  67.        getTotal(kingdoms[a],'losses') - getTotal(kingdoms[b],'losses') ||
  68.        a.localeCompare(b)
  69.     );
  70.  
  71.     let winner = findKingdom[0];
  72.     console.log(`Winner: ${winner}`);
  73.    
  74.     let generals = Object.keys(kingdoms[winner]).sort((a,b)=>
  75.         kingdoms[winner][b].army - kingdoms[winner][a].army
  76.     )
  77.     generals.forEach(general =>{
  78.         let info = kingdoms[winner][general]
  79.         console.log(`/\\general: ${general}`);
  80.         console.log(`---army: ${info.army}`);
  81.         console.log(`---wins ${info.wins}`);
  82.         console.log(`---losses: ${info.losses}`)
  83.     })
  84.  
  85.     function getTotal(kingdom,type){
  86.         return Object.keys(kingdom).reduce((acc,cur) => (acc + kingdom[cur][type]),0)
  87.     }
  88. }
  89.  
  90. solve(
  91.     [
  92.       { kingdom: "Maiden Way", general: "Merek", army: 5000 },
  93.       { kingdom: "Stonegate", general: "Ulric", army: 4900 },
  94.       { kingdom: "Stonegate", general: "Doran", army: 70000 },
  95.       { kingdom: "YorkenShire", general: "Quinn", army: 0 },
  96.       { kingdom: "YorkenShire", general: "Quinn", army: 2000 },
  97.       { kingdom: "Maiden Way", general: "Berinon", army: 100000 }
  98.     ],
  99.     [ ["YorkenShire", "Quinn", "Stonegate", "Ulric"],
  100.       ["Stonegate", "Ulric", "Stonegate", "Doran"],
  101.       ["Stonegate", "Doran", "Maiden Way", "Merek"],
  102.       ["Stonegate", "Ulric", "Maiden Way", "Merek"],
  103.       ["Maiden Way", "Berinon", "Stonegate", "Ulric"]
  104.     ]
  105. );
Advertisement
Add Comment
Please, Sign In to add comment