Advertisement
RRusev77

ArenaTier

Jul 12th, 2020
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(inputArr) {
  2.  
  3.     // functions
  4.     const calculateSkillPoints = entries => {
  5.         let result = 0;
  6.  
  7.         entries.forEach(entrie => {
  8.             let points = entrie[1];
  9.             result += points;
  10.         });
  11.  
  12.         return result;
  13.     }
  14.  
  15.     let gladiators = new Map();
  16.  
  17.     let command = inputArr.shift();
  18.  
  19.     while(command !== 'Ave Cesar') {
  20.         if(command.includes(' vs ')) {
  21.             let [firstGladiator, secondGladiator] = command.split(' vs ');
  22.  
  23.             if(gladiators.has(firstGladiator) && gladiators.has(secondGladiator)) {
  24.                 let haveTechniqueInCommon = false;
  25.                 let firstGladiatorEntries = Object.entries(gladiators.get(firstGladiator));
  26.                 let secondGladiatorEntries = Object.entries(gladiators.get(secondGladiator));
  27.  
  28.                 for(let i = 0; i < firstGladiatorEntries.length; i++) {
  29.                     let firstGSkill = firstGladiatorEntries[i][0];
  30.                     for(let j = 0; j < secondGladiatorEntries.length; j++) {
  31.                         let secondGSkill = secondGladiatorEntries[j][0];
  32.                        
  33.                         if(firstGSkill == secondGSkill) {
  34.                             haveTechniqueInCommon = true;
  35.                             break;
  36.                         }
  37.                     }
  38.                 }
  39.  
  40.                 if(haveTechniqueInCommon) {
  41.                     let firstGladiatorTotalSkillPoints = calculateSkillPoints(firstGladiatorEntries);
  42.                     let secondGladiatorTotalSkillPoints = calculateSkillPoints(secondGladiatorEntries);
  43.                    
  44.                     if(firstGladiatorTotalSkillPoints > secondGladiatorTotalSkillPoints) {
  45.                         gladiators.delete(secondGladiator);
  46.                     } else {
  47.                         gladiators.delete(firstGladiator);
  48.                     }
  49.                 }
  50.             }
  51.             // 3... 2... 1... Round One:... FIGHT!
  52.         } else {
  53.             let [gladiatorName, technique, skillPoint] = command.split(' -> ');
  54.             skillPoint = Number(skillPoint);
  55.  
  56.             if(!gladiators.has(gladiatorName)) {
  57.                 let obj = {
  58.                     [technique]: skillPoint,
  59.                 }
  60.                 gladiators.set(gladiatorName, obj);
  61.  
  62.             } else {
  63.                 if(gladiators.get(gladiatorName)[technique] !== undefined) {
  64.                     let oldSkillPoints = gladiators.get(gladiatorName)[technique];
  65.                     if(skillPoint > oldSkillPoints) {
  66.                         gladiators.get(gladiatorName)[technique] = skillPoint;
  67.                     }
  68.                 // ==============================================================
  69.                 } else {
  70.                     gladiators.get(gladiatorName)[technique] = skillPoint;
  71.                 }
  72.             }
  73.         }
  74.  
  75.         command = inputArr.shift();
  76.     }
  77.    
  78.     let sortedEntries = Array.from(gladiators.entries()).sort((a, b) => {
  79.         let totalSkillPointA = calculateSkillPoints(Object.entries(a[1]));
  80.         let totalSkillPointB = calculateSkillPoints(Object.entries(b[1]));
  81.  
  82.         if(totalSkillPointA !== totalSkillPointB) {
  83.             return totalSkillPointB - totalSkillPointA;
  84.         } else {
  85.             return a[0].localeCompare(b[0]);
  86.         }
  87.     });
  88.  
  89.     sortedEntries.forEach(entrie => {
  90.         let [name, skills] = entrie;
  91.         let skillEntries = Object.entries(skills);
  92.         let totalSkill = calculateSkillPoints(skillEntries);
  93.  
  94.         console.log(`${name}: ${totalSkill} skill`);
  95.         skillEntries.sort((a, b) => {
  96.             let techniquePointsA = a[1];
  97.             let techniquePointsB = b[1];
  98.  
  99.             if(techniquePointsA != techniquePointsB) {
  100.                 return techniquePointsB - techniquePointsA;
  101.             } else {
  102.                 return a[0].localeCompare(b[0]);
  103.             }
  104.         });
  105.  
  106.         skillEntries.forEach(entrie => {
  107.             console.log(`- ${entrie[0]} <!> ${entrie[1]}`);
  108.         });
  109.     });
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement