Advertisement
krasizorbov

Armies

Jul 7th, 2020
1,527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solution(input = []) {
  2.   let data = new Map();
  3.   for (let i = 0; i < input.length; i++) {
  4.     if (input[i].includes("arrives")) {
  5.       let leader = input[i].replace(" arrives", "");
  6.       data.set(leader, []);
  7.     } else if (input[i].includes(":")) {
  8.       let line = input[i].split(": ");
  9.       let leader = line[0];
  10.       let str = line[1].split(", ");
  11.       let army = str[0];
  12.       let count = +str[1];
  13.       let obj = { armyName: army, count: count };
  14.       if (data.has(leader)) {
  15.         data.get(leader).push(obj);
  16.       }
  17.     } else if (input[i].includes("+")) {
  18.       let [army, count] = input[i].split(" + ");
  19.       for (const d of data) {
  20.         d[1].forEach((obj) => {
  21.           if (obj["armyName"] === army) {
  22.             obj.count += +count;
  23.           }
  24.         });
  25.       }
  26.     } else if (input[i].includes("defeated")) {
  27.       let leader = input[i].replace(" defeated", "");
  28.       if (data.has(leader)) {
  29.         data.delete(leader);
  30.       }
  31.     }
  32.   }
  33.   let namesAndTotalCount = new Map();
  34.   for (const d of data) {
  35.     let sum = 0;
  36.     d[1].forEach((obj) => {
  37.       sum += obj.count;
  38.     });
  39.     namesAndTotalCount.set(d[0], sum);
  40.   }
  41.   namesAndTotalCount = new Map(
  42.     [...namesAndTotalCount.entries()].sort((a, b) => b[1] - a[1])
  43.   );
  44.   for (const entries of namesAndTotalCount) {
  45.     console.log(`${entries[0]}: ${entries[1]}`);
  46.     for (const d of data) {
  47.       if (d[0] === entries[0]) {
  48.         d[1].sort((a, b) => b.count - a.count);
  49.         for (const obj of d[1]) {
  50.           console.log(`>>> ${obj.armyName} - ${obj.count}`);
  51.         }
  52.       }
  53.     }
  54.   }
  55. }
  56. solution([
  57.   "Rick Burr arrives",
  58.   "Fergus: Wexamp, 30245",
  59.   "Rick Burr: Juard, 50000",
  60.   "Findlay arrives",
  61.   "Findlay: Britox, 34540",
  62.   "Wexamp + 6000",
  63.   "Juard + 1350",
  64.   "Britox + 4500",
  65.   "Porter arrives",
  66.   "Porter: Legion, 55000",
  67.   "Legion + 302",
  68.   "Rick Burr defeated",
  69.   "Porter: Retix, 3205",
  70. ]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement