Advertisement
tetris555

armies

Nov 24th, 2022
601
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(arr) {
  2.     const leaders = new Map();
  3.  
  4.     for (const entry of arr) {
  5.         if (/arrives/.test(entry)) {
  6.             const leader = entry.match(/.+(?= arrives)/)[0];
  7.             if (!leaders.get(leader)) {
  8.                 leaders.set(leader, new Map());
  9.             }
  10.         }
  11.         else if (/:/.test(entry)) {
  12.             let { l, a, c } = entry.match(/(?<l>[\w\s]+):\s(?<a>[\w\s]+),\s(?<c>\d+)/).groups;
  13.             c = Number(c);
  14.  
  15.             if (leaders.has(l)) {
  16.                 leaders.get(l).set(a, c);
  17.             }
  18.         }
  19.                 else if (/defeated/.test(entry)) {
  20.             const { l } = entry.match(/(?<l>.+(?=\sdefeated))/).groups;
  21.             if (leaders.has(l)) {
  22.                 leaders.delete(l);
  23.             }
  24.         }
  25.         else if (/\+/.test(entry)) {
  26.             let [a, c] = entry.split(' + ');
  27.             c = Number(c);
  28.             [...leaders.keys()].forEach(l => {
  29.                 if (leaders.get(l).has(a)) {
  30.                     const prevCount = leaders.get(l).get(a);
  31.                     leaders.get(l).set(a, prevCount + c);
  32.                 }
  33.             })
  34.         }
  35.     }
  36.         // sort the leaders by total army count in descending. Then each army should be sorted by count in descending.
  37.     [...leaders.keys()].forEach(a => {
  38.         const army = leaders.get(a);
  39.         const total = [...army.values()].reduce((x, y) => x + y, 0);;
  40.         leaders.get(a).set('total', total);
  41.     });
  42.     [...leaders.entries()].sort((a, b) => {
  43.         return b[1].get('total') - a[1].get('total');
  44.     }).forEach(x => {
  45.         console.log(`${x[0]}: ${x[1].get('total')}`);
  46.         x[1].delete('total');
  47.         [...x[1].entries()].sort((a, b) => b[1] - a[1]).forEach(a => {
  48.             console.log(`>>> ${a[0]} - ${a[1]}`);
  49.         })
  50.     });
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement