Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(input){
- class Leader{
- constructor(name){
- this.name = name;
- this.armies = [];
- this.armyCount = 0;
- }
- addArmy(army){
- this.armies.push(army);
- let count = this.armyCount;
- count += army.count;
- this.armyCount = count;
- }
- updateCount(number){
- let count = this.armyCount;
- count += number;
- this.armyCount = count;
- }
- }
- class Army{
- constructor(name, count){
- this.name = name;
- this.count = count;
- }
- updateCount(number){
- let currentCount = this.count;
- currentCount += number;
- this.count = currentCount;
- }
- }
- let leadersNames = [];
- let leadersList= [];
- let armyNames = [];
- let armyList = [];
- for (const line of input) {
- if(line.includes('arrives')){
- let name = line.slice(0, line.indexOf('arrives')-1);
- if(!leadersNames.includes(name)){
- leadersNames.push(name);
- let leader = new Leader(name);
- leadersList.push(leader);
- }
- }else if(line.includes('defeated')){
- let name = line.slice(0, line.indexOf('defeated')-1);
- let index = leadersNames.indexOf(name);
- if(index !==-1){
- leadersNames.splice(index,1);
- leadersList.splice(index,1);
- }
- }else if(line.includes(': ')){
- let [name, armyNameandCount] = line.split(': ');
- let index = leadersNames.indexOf(name);
- if(index !== -1){
- let [army, count] = armyNameandCount.split(', ');
- if(!armyList.includes(army)){
- let newArmy = new Army(army, Number(count));
- let currentLeader = leadersList[index];
- currentLeader.addArmy(newArmy);
- armyNames.push(army);
- armyList.push(newArmy);
- }
- }
- }else if(line.includes(' + ')){
- let [armyName, armyCount] = line.split(' + ');
- let index = armyNames.indexOf(armyName);
- if(index !== -1){
- let currentArmy = armyList[index];
- currentArmy.updateCount(Number(armyCount));
- for (const leader of leadersList) {
- for (const one of leader.armies) {
- if (one.name === armyName){
- let currentLeader = leader;
- currentLeader.updateCount(Number(armyCount));
- break;
- }
- }
- }
- }
- }
- }
- let sortedLeaders = leadersList.sort((a,b)=>{
- return b.armyCount - a.armyCount;
- })
- sortedLeaders.forEach(leader=>{
- console.log(`${leader.name}: ${leader.armyCount}`);
- let sortedArmies = leader.armies.sort((a,b)=>{
- return b.count - a.count;
- })
- sortedArmies.forEach(army=>{
- console.log(`>>> ${army.name} - ${army.count}`);
- })
- })
- }
Advertisement
Add Comment
Please, Sign In to add comment