Advertisement
Danny_Berova

09.ArenaTier

Oct 7th, 2018
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function arenaTier(input) {
  2.     let pool = {};
  3.     let totalScore = '%totalScore%';
  4.     for (let line of input) {
  5.         if(line.includes('->')){
  6.             let [name, technique, score] = line.split(/ -> /);
  7.  
  8.             if(!pool.hasOwnProperty(name)) {
  9.                 pool[name] = {};
  10.                 pool[name][totalScore] = 0;
  11.             }
  12.  
  13.             if(!pool[name].hasOwnProperty(technique)) {
  14.                  pool[name][technique] = +score;
  15.                  pool[name][totalScore] += +score
  16.             } else {
  17.                 if(pool[name][technique] < +score) {
  18.                     let previousScore = pool[name][technique];
  19.                     pool[name][technique] = +score;
  20.                     pool[name][totalScore] += +score - previousScore;
  21.                 }
  22.             }
  23.         } else if (line.includes(' vs ')) {
  24.             let [firstGl, secondGl] = line.split(/ vs /);
  25.             let first = pool[firstGl];
  26.             let second = pool[secondGl];
  27.  
  28.             if(pool.hasOwnProperty(firstGl) && pool.hasOwnProperty(secondGl)) {
  29.                 let found = false
  30.                 Object.keys(first)
  31.                     .forEach((key) => {
  32.                         if(found) {
  33.                             return;
  34.                         }
  35.                         if( key !== totalScore && pool[secondGl].hasOwnProperty(key)) {
  36.                            if(first[totalScore] > second[totalScore]) {
  37.                                delete pool[secondGl];
  38.                                found = true;
  39.                            } else {
  40.                                delete pool[firstGl];
  41.                                found = true;
  42.                            }
  43.                         }
  44.                     });
  45.             } else {
  46.                 break;
  47.             }
  48.         } else {
  49.             break;
  50.         }
  51.     }
  52.  
  53.     let sortedKeys = Object
  54.                     .keys(pool)
  55.                     .sort((a, b) =>
  56.                         pool[b][totalScore] - pool[a][totalScore] || a.localeCompare(b));
  57.  
  58.     let result = [];
  59.     for (const key of sortedKeys) {
  60.         result.push(`${key}: ${ pool[key][totalScore]} skill`)
  61.  
  62.         let sortedTechiques = Object
  63.                 .keys(pool[key])
  64.                 .filter(t => t != totalScore)
  65.                 .sort((a, b) =>
  66.                     +pool[key][b] - +pool[key][a] || a.localeCompare(b));
  67.  
  68.         for (const tech of sortedTechiques) {
  69.             result.push(`- ${tech} <!> ${pool[key][tech]}` )
  70.         }
  71.     }
  72.  
  73.     return result.join('\n');
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement