Advertisement
Lulunga

09. Arena Tier Associative Arrays

Jul 11th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function arenaTier(input) {
  2.     let pool = {}
  3.  
  4.     for (let data of input) {
  5.         if (data === 'Ave Cesar') {
  6.             break;
  7.         }
  8.         let splitted = data.split(/ -> | vs /);
  9.  
  10.         //ADD GLADIATORS TO POOL
  11.         if (splitted.length > 2) {
  12.             let gladiator = splitted[0].trim();
  13.             let technique = splitted[1].trim();
  14.             let skill = Number(splitted[2].trim());
  15.  
  16.             if (pool.hasOwnProperty(gladiator) === false) {
  17.                 pool[gladiator] = {
  18.                     totalPoints: 0,
  19.                     techniques: {}
  20.                 };
  21.             }
  22.  
  23.             if (pool[gladiator]['techniques'].hasOwnProperty(technique) === false) {
  24.                 pool[gladiator]['techniques'][technique] = 0;
  25.                 pool[gladiator]["totalPoints"] += skill;
  26.             }
  27.  
  28.             if (skill > pool[gladiator]['techniques'][technique]) {
  29.                 pool[gladiator]['techniques'][technique] = skill;
  30.  
  31.                 let diff = skill - pool[gladiator]['techniques'][technique];
  32.                 pool[gladiator]["totalPoints"] += diff;
  33.             }
  34.         }
  35.  
  36.         //GLADIATORS FIGHT
  37.         else {
  38.             let gladiator1 = splitted[0].trim();
  39.             let gladiator2 = splitted[1].trim();
  40.  
  41.             if (pool.hasOwnProperty(gladiator1) && pool.hasOwnProperty(gladiator2)) {
  42.                 let haCommonTechnique = false;
  43.  
  44.                 for (let t1 of Object.entries(pool[gladiator1]['techniques'])) {
  45.                     for (let t2 of Object.entries(pool[gladiator2]['techniques'])) {
  46.                         if (t1[0] === t2[0]) {
  47.                             haCommonTechnique = true;
  48.                             break;
  49.                         }
  50.                     }
  51.                     if (haCommonTechnique) {
  52.                         break;
  53.                     }
  54.                 }
  55.  
  56.                 if (haCommonTechnique) {
  57.                     if (pool[gladiator1]["totalPoints"] > pool[gladiator2]["totalPoints"]) {
  58.                         //  pool[gladiator2] = null; // 90/100 last test - runtime error
  59.                         delete pool[gladiator2];
  60.                     }
  61.                     else if (pool[gladiator2]["totalPoints"] > pool[gladiator1]["totalPoints"]) {
  62.                         //  pool[gladiator1] = null; // 90/100 last test - runtime error
  63.                         delete pool[gladiator1];
  64.                     }
  65.                 }
  66.             }
  67.         }
  68.     }
  69.  
  70.     let result = Object.entries(pool).filter(x => x[1] !== null)
  71.         .sort((a, b) => b[1]["totalPoints"] - a[1]["totalPoints"])
  72.         .sort((a, b) => a[0] - b[0]);
  73.  
  74.  
  75.     for (let gladiator of result) {
  76.         console.log(`${gladiator[0]}: ${gladiator[1]["totalPoints"]} skill`);
  77.  
  78.         let sortedTechniques = Object.entries(gladiator[1]["techniques"])
  79.             .sort((a, b) => b[1] - a[1])
  80.             .sort((a, b) => a[0] - b[0]);
  81.  
  82.         for (let technique of sortedTechniques) {
  83.             console.log(`- ${technique[0]} <!> ${technique[1]}`);
  84.         }
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement