Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(arr) {
- const leaders = new Map();
- for (const entry of arr) {
- if (/arrives/.test(entry)) {
- const leader = entry.match(/.+(?= arrives)/)[0];
- if (!leaders.get(leader)) {
- leaders.set(leader, new Map());
- }
- }
- else if (/:/.test(entry)) {
- let { l, a, c } = entry.match(/(?<l>[\w\s]+):\s(?<a>[\w\s]+),\s(?<c>\d+)/).groups;
- c = Number(c);
- if (leaders.has(l)) {
- leaders.get(l).set(a, c);
- }
- }
- else if (/defeated/.test(entry)) {
- const { l } = entry.match(/(?<l>.+(?=\sdefeated))/).groups;
- if (leaders.has(l)) {
- leaders.delete(l);
- }
- }
- else if (/\+/.test(entry)) {
- let [a, c] = entry.split(' + ');
- c = Number(c);
- [...leaders.keys()].forEach(l => {
- if (leaders.get(l).has(a)) {
- const prevCount = leaders.get(l).get(a);
- leaders.get(l).set(a, prevCount + c);
- }
- })
- }
- }
- // sort the leaders by total army count in descending. Then each army should be sorted by count in descending.
- [...leaders.keys()].forEach(a => {
- const army = leaders.get(a);
- const total = [...army.values()].reduce((x, y) => x + y, 0);;
- leaders.get(a).set('total', total);
- });
- [...leaders.entries()].sort((a, b) => {
- return b[1].get('total') - a[1].get('total');
- }).forEach(x => {
- console.log(`${x[0]}: ${x[1].get('total')}`);
- x[1].delete('total');
- [...x[1].entries()].sort((a, b) => b[1] - a[1]).forEach(a => {
- console.log(`>>> ${a[0]} - ${a[1]}`);
- })
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement