Todorov_Stanimir

02. Armies Associative Arrays - More Exercises

May 26th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function armies(params) {
  2.     let armies = new Map();
  3.     for (command of params) {
  4.         if (command.includes('arrives')) {
  5.             let nameLeader = command.substr(0, (command.length - 8));
  6.             if (!armies.has(nameLeader)) {
  7.                 armies.set(nameLeader, []);
  8.             }
  9.         } else if (command.includes(': ')) {
  10.             let [nameLeader, armyAndCount] = command.split(': ');
  11.             let [army, count] = armyAndCount.split(', ');
  12.             count = Number(count);
  13.             if (armies.has(nameLeader)) {
  14.                 let currentArmy = armies.get(nameLeader);
  15.                 currentArmy.push([`${army} - ${count}`])
  16.                 armies.set(nameLeader, currentArmy);
  17.             }
  18.         } else if (command.includes(' defeated')) {
  19.             let nameLeader = command.substr(0, (command.length - 9));
  20.             if (armies.has(nameLeader)) {
  21.                 armies.delete(nameLeader);
  22.             }
  23.         } else if (command.includes(' + ')) {
  24.             let [newArmy, newCount] = command.split(' + ');
  25.             newCount = Number(newCount);
  26.             let leaders = [...(armies.keys())];
  27.             for (let nameLeader of leaders) {
  28.                 if (armies.has(nameLeader)) {
  29.                     let currentArmy = armies.get(nameLeader);
  30.                     for (let armyAndCount in currentArmy) {
  31.                         let [army, count] = String(currentArmy[armyAndCount]).split(' - ');
  32.                         count = Number(count);
  33.                         if (army === newArmy) {
  34.                             count += newCount;
  35.                             currentArmy.splice(armyAndCount, 1, [`${army} - ${count}`]);
  36.                             armies.set(nameLeader, currentArmy);
  37.                             break;
  38.                         }
  39.                     }
  40.                 }
  41.             }
  42.  
  43.         }
  44.     }
  45.     let result = [...(armies.entries())];
  46.     result.sort(sortLeaders);
  47.  
  48.     function sortLeaders(a, b) {
  49.         let powerA = 0;
  50.         let powerB = 0;
  51.         for (let itema of a[1]) {
  52.             powerA += Number(String(itema).split(' - ')[1]);
  53.         }
  54.         for (let itemb of b[1]) {
  55.             powerB += Number(String(itemb).split(' - ')[1]);
  56.         }
  57.         if (powerA > powerB) {
  58.             return -1;
  59.         } else if (powerA < powerB) {
  60.             return 1;
  61.         }
  62.     }
  63.  
  64.     for (let lieder of result) {
  65.         let armyLieder = lieder[1];
  66.         armyLieder.sort(armySort);
  67.  
  68.         function armySort(a, b) {
  69.             let powerA = Number(String(a).split(' - ')[1]);
  70.             let powerB = Number(String(b).split(' - ')[1]);
  71.             if (powerA > powerB) {
  72.                 return -1;
  73.             } else if (powerA < powerB) {
  74.                 return 1;
  75.             }
  76.         }
  77.  
  78.     }
  79.  
  80.     for (let lieder of result) {
  81.         let power = 0;
  82.         for (let item of lieder[1]) {
  83.             for (let army of item) {
  84.                 power += Number(String(army).split(' - ')[1]);
  85.             }
  86.         }
  87.         console.log(`${lieder[0]}: ${power}`);
  88.         for (let item of lieder[1]) {
  89.             console.log(`>>> ${item}`);
  90.         }
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment