Advertisement
Guest User

Arena Tier

a guest
Jul 14th, 2020
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function arenaTier(input) {
  2.     let start = 0;
  3.     let endProgram = false;
  4.     let obj = {};
  5.     for (let line of input) {
  6.         if (line === "Ave Cesar") {     // ends the loop
  7.             endProgram = true;
  8.             break;
  9.         }
  10.         if (line.includes("vs")) {      // fighting
  11.             start = input.indexOf(line);
  12.             break;
  13.  
  14.         } else {
  15.             let [name, technique, skill] = line.split(" -> ");
  16.             skill = Number(skill);
  17.             if (!obj.hasOwnProperty(name)) {
  18.                 obj[name] = {};
  19.                 obj[name][technique] = skill;
  20.             } else if (obj.hasOwnProperty(name) && !obj[name].hasOwnProperty(technique)) {
  21.                 obj[name][technique] = skill;
  22.             } else if (obj.hasOwnProperty(name) && obj[name].hasOwnProperty(technique)) {
  23.                 if (skill > obj[name][technique]) {
  24.                     obj[name][technique] = skill;
  25.                 }
  26.             }
  27.         }
  28.     }
  29.     for (let name in obj) {      // calc totalSkill
  30.         let totalSkill = 0;
  31.         for (let tech in obj[name]) {
  32.             totalSkill += obj[name][tech];
  33.         }
  34.         obj[name].totalSkill = totalSkill;
  35.     }
  36.  
  37.     if (start > 0) {
  38.         for (let i = start; i < input.length; i++) {
  39.             if (input[i] === "Ave Cesar") {
  40.                 endProgram = true;
  41.                 break;
  42.             }
  43.             let [gladiator1, gladiator2] = input[i].split(" vs ");
  44.             let willFight = false;
  45.             let commonTechnique = "";
  46.             if (obj.hasOwnProperty(gladiator1) && obj.hasOwnProperty(gladiator2)) {
  47.                 for (let tech in obj[gladiator1]) {
  48.                     if (obj[gladiator2].hasOwnProperty(tech)) {
  49.                         willFight = true;
  50.                         commonTechnique = tech;
  51.                         break;
  52.                     }
  53.                 }
  54.             }
  55.             if (willFight) {
  56.                 if (obj[gladiator1].totalSkill > obj[gladiator2].totalSkill) {
  57.                     delete obj[gladiator2];
  58.                 } else if (obj[gladiator1].totalSkill < obj[gladiator2].totalSkill) {
  59.                     delete obj[gladiator1];
  60.                 }
  61.             }
  62.         }
  63.     }
  64.  
  65.     let sorted = Object.entries(obj).sort((a, b) => {    //sorted by totalSkill first, by name second
  66.         if (b[1].totalSkill - a[1].totalSkill === 0) {
  67.             return a[0].localeCompare(b[0]);
  68.         } else {
  69.             return b[1].totalSkill - a[1].totalSkill;
  70.         }
  71.     });
  72.  
  73.     if (endProgram) {       // Ave Cesar
  74.         for (let pair of sorted) {
  75.             console.log(`${pair[0]}: ${pair[1].totalSkill} skill`);
  76.             pair[1] = Object.entries(pair[1]).sort((a, b) => {
  77.                 if (b[1] - a[1] !== 0) {
  78.                     return b[1] - a[1];
  79.                 } else {
  80.                     return a[0].localeCompare(b[0]);
  81.                 }
  82.             });
  83.             for (let kvp of pair[1]) {
  84.                 if (kvp[0] !== "totalSkill") {
  85.                     console.log(`- ${kvp[0]} <!> ${kvp[1]}`);
  86.                 }
  87.             }
  88.         }
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement