Advertisement
Lulunga

final retake 04. MOBA Challenger

Aug 1st, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(input) {
  2.  
  3.    let playerPool = {};
  4.  
  5.    for (let line of input) {
  6.       if (line === "Season end") {
  7.          break;
  8.       }
  9.       if (line.includes(' -> ')) {
  10.          let [player, position, skill] = line.split(' -> ');
  11.          if (!playerPool[player]) {
  12.             let positionAndSkill = {};
  13.             playerPool[player] = positionAndSkill;
  14.             positionAndSkill[position] = Number(skill);
  15.          } else {
  16.             if (!playerPool[player][position]) {
  17.                playerPool[player][position] = Number(skill);
  18.             } else {
  19.                let currentSkill = playerPool[player][position];
  20.                if (currentSkill < Number(skill)) {
  21.                   playerPool[player][position] = Number(skill);
  22.                }
  23.             }
  24.          }
  25.  
  26.       } else if (line.includes(' vs ')) {
  27.          let [firstPlayer, secondPlayer] = line.split(' vs ');
  28.          if (playerPool.hasOwnProperty(firstPlayer) && playerPool.hasOwnProperty(secondPlayer)) {
  29.             let firstPositions = Object.keys(playerPool[firstPlayer]);
  30.             let secondPositions = Object.keys(playerPool[secondPlayer]);
  31.             let firstTotalSkills = Object.values(playerPool[firstPlayer]).reduce((a, b) => a + b, 0);
  32.             let secondTotalSkills = Object.values(playerPool[secondPlayer]).reduce((a, b) => a + b, 0);
  33.             const found = firstPositions.some(element => secondPositions.indexOf(element) >= 0);
  34.             if (found) {
  35.                firstTotalSkills > secondTotalSkills
  36.                   ? delete playerPool[secondPlayer]
  37.                   : delete playerPool[firstPlayer];
  38.             } else {
  39.                continue;
  40.             }
  41.          }
  42.       }
  43.    }
  44.    let sorted = Object.entries(playerPool)
  45.       .sort((first, second) => Object.values(second[1]).reduce((a, b) => a + b, 0) - Object.values(first[1]).reduce((a, b) => a + b, 0) || first[0].localeCompare(second[0]))
  46.       .forEach(element => {
  47.          let totalSkill = Object.values(element[1]).reduce((a, b) => a + b, 0);
  48.          console.log(`${element[0]}: ${totalSkill} skill`);
  49.          let sortedData = Object.entries(element[1]);
  50.          sortedData.sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
  51.             .forEach(item => {
  52.                console.log(`- ${item[0]} <::> ${item[1]}`);
  53.             });
  54.  
  55.       });
  56.  
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement