Advertisement
Todorov_Stanimir

09. Arena Tier

Sep 29th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function arenaTier(input) {
  2.     let gladiators = {};
  3.     while ((line = input.shift()) !== 'Ave Cesar') {
  4.         if (!line.includes(' vs ')) {
  5.             let [gladiator, technique, skill] = line.split(' -> ');
  6.             skill = Number(skill);
  7.             if (!(gladiator in gladiators)) {
  8.                 gladiators[gladiator] = { totalSkill: 0 };
  9.                 gladiators[gladiator][technique] = skill;
  10.                 gladiators[gladiator].totalSkill += skill;
  11.             } else {
  12.                 if (!(technique in gladiators[gladiator])) {
  13.                     gladiators[gladiator][technique] = skill;
  14.                     gladiators[gladiator].totalSkill += skill;
  15.                 } else {
  16.                     if (gladiators[gladiator][technique] < skill) {
  17.                         gladiators[gladiator].totalSkill += skill - gladiators[gladiator][technique];
  18.                         gladiators[gladiator][technique] = skill;
  19.                     }
  20.                 }
  21.             }
  22.         } else {
  23.             let [gladiator1, gladiator2] = line.split(' vs ');
  24.             if ((gladiator1 in gladiators) && (gladiator2 in gladiators)) {
  25.                 let techniquesGladiator1 = Object.keys(gladiators[gladiator1]);
  26.                 let techniquesGladiator2 = Object.keys(gladiators[gladiator2]);
  27.                 for (let techniqueGladiator1 of techniquesGladiator1) {
  28.                     if (techniquesGladiator2.includes(techniqueGladiator1) && techniqueGladiator1 !== 'totalSkill') {
  29.                         if (gladiators[gladiator1].totalSkill > gladiators[gladiator2].totalSkill) {
  30.                             delete gladiators[gladiator2];
  31.                         } else {
  32.                             delete gladiators[gladiator1];
  33.                         }
  34.                         break;
  35.                     }
  36.                 }
  37.             }
  38.         }
  39.     }
  40.     Object.entries(gladiators)
  41.         .sort((a, b) => a[0].localeCompare(b[0]))
  42.         .sort((a, b) => b[1].totalSkill - a[1].totalSkill)
  43.         .forEach(gladiator => {
  44.             console.log(`${gladiator[0]}: ${gladiator[1].totalSkill} skill`);
  45.             delete gladiator[1].totalSkill;
  46.             Object.entries(gladiator[1])
  47.                 .sort((a, b) => a[0].localeCompare(b[0]))
  48.                 .sort((a, b) => b[1] - a[1])
  49.                 .forEach(a => console.log(`- ${a[0]} <!> ${a[1]}`));
  50.         });
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement