Advertisement
Todorov_Stanimir

02. Armies Associative Arrays - More Exercises

Sep 3rd, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function armies(input) {
  2.     let leaders = {};
  3.  
  4.     input.forEach(line => {
  5.         if (line.includes(' arrives')) {
  6.             nameLeader = line.split(' arrives').filter(el => el !== '');
  7.             leaders[nameLeader] = {};
  8.         } else if (line.includes(': ')) {
  9.             let [nameLeader, armyAndCount] = line.split(': ');
  10.             let [army, count] = armyAndCount.split(', ');
  11.             count = Number(count);
  12.             if (nameLeader in leaders) {
  13.                 leaders[nameLeader][army] = count;
  14.             }
  15.         } else if (line.includes(' + ')) {
  16.             let [army, count] = line.split(' + ');
  17.             count = Number(count);
  18.             for (let leader in leaders) {
  19.                 if (army in leaders[leader]) {
  20.                     leaders[leader][army] += count;
  21.                 }
  22.             }
  23.         } else if (line.includes(' defeated')) {
  24.             let leader = line.split(' defeated').filter(el => el !== '');
  25.             if (leader in leaders) {
  26.                 delete leaders[leader];
  27.             }
  28.         }
  29.     });
  30.     Object.entries(leaders).sort((a, b) => {
  31.         let totalArmy1 = Object.values(a[1]).reduce((a, b) => (a + b), 0);
  32.         let totalArmy2 = Object.values(b[1]).reduce((a, b) => (a + b), 0);
  33.         return totalArmy2 - totalArmy1
  34.     })
  35.         .forEach(leader => {
  36.             console.log(`${leader[0]}: ${Object.values(leader[1]).reduce((a, b) => (a + b), 0)}`);
  37.             Object.entries(leader[1])
  38.                 .sort((a, b) => b[1] - a[1])
  39.                 .forEach(army => console.log(`>>> ${army[0]} - ${army[1]}`));
  40.         })
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement