maymunskoa

02. Armies (Assoc Arrays)

Mar 10th, 2020
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(input){
  2. class Leader{
  3.     constructor(name){
  4.         this.name = name;
  5.         this.armies = [];
  6.         this.armyCount = 0;
  7.     }
  8.     addArmy(army){
  9.         this.armies.push(army);
  10.         let count = this.armyCount;
  11.         count += army.count;
  12.         this.armyCount = count;
  13.     }
  14.  
  15.     updateCount(number){
  16.         let count = this.armyCount;
  17.         count += number;
  18.         this.armyCount = count;
  19.     }
  20. }
  21.  
  22. class Army{
  23.     constructor(name, count){
  24.         this.name = name;
  25.         this.count = count;
  26.     }
  27.     updateCount(number){
  28.         let currentCount = this.count;
  29.         currentCount += number;
  30.         this.count = currentCount;
  31.     }
  32. }
  33. let leadersNames = [];
  34. let leadersList= [];
  35. let armyNames = [];
  36. let armyList = [];
  37.  
  38.  
  39.    for (const line of input) {
  40.  
  41.        if(line.includes('arrives')){
  42.            let name = line.slice(0, line.indexOf('arrives')-1);
  43.            if(!leadersNames.includes(name)){
  44.                leadersNames.push(name);
  45.                let leader = new Leader(name);
  46.                leadersList.push(leader);
  47.            }
  48.     }else if(line.includes('defeated')){
  49.             let name = line.slice(0, line.indexOf('defeated')-1);
  50.             let index = leadersNames.indexOf(name);
  51.             if(index !==-1){
  52.                 leadersNames.splice(index,1);
  53.                 leadersList.splice(index,1);
  54.             }
  55.            }else if(line.includes(': ')){
  56.             let [name, armyNameandCount] = line.split(': ');
  57.             let index = leadersNames.indexOf(name);
  58.             if(index !== -1){
  59.                 let [army, count] = armyNameandCount.split(', ');
  60.                 if(!armyList.includes(army)){
  61.                     let newArmy = new Army(army, Number(count));
  62.                     let currentLeader = leadersList[index];
  63.                     currentLeader.addArmy(newArmy);
  64.                     armyNames.push(army);
  65.                     armyList.push(newArmy);
  66.                 }
  67.                
  68.             }
  69.            }else if(line.includes(' + ')){
  70.             let [armyName, armyCount] = line.split(' + ');
  71.             let index = armyNames.indexOf(armyName);
  72.             if(index !== -1){
  73.                 let currentArmy = armyList[index];
  74.                 currentArmy.updateCount(Number(armyCount));
  75.                 for (const leader of leadersList) {
  76.                     for (const one of leader.armies) {
  77.                         if (one.name === armyName){
  78.                             let currentLeader = leader;
  79.                             currentLeader.updateCount(Number(armyCount));
  80.                             break;
  81.                         }
  82.                        
  83.                     }
  84.                 }
  85.                
  86.             }
  87.            }
  88.            
  89.        
  90.    }
  91.  
  92. let sortedLeaders = leadersList.sort((a,b)=>{
  93.     return b.armyCount - a.armyCount;
  94. })
  95.  
  96. sortedLeaders.forEach(leader=>{
  97.     console.log(`${leader.name}: ${leader.armyCount}`);
  98.     let sortedArmies = leader.armies.sort((a,b)=>{
  99.         return b.count - a.count;
  100.        
  101.     })
  102.     sortedArmies.forEach(army=>{
  103.         console.log(`>>> ${army.name} - ${army.count}`);
  104.        
  105.     })
  106. })
  107.    
  108. }
Advertisement
Add Comment
Please, Sign In to add comment