Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(input) {
- const bandMembers = new Map();
- function saveBandsAndMembers(band, members) {
- if (!bandMembers.has(band)) {
- bandMembers.set(band, {
- members: new Set(members)
- });
- } else {
- const currentValue = bandMembers.get(band);
- const currentMembers = Array.from(currentValue.members || []);
- const newMembers = currentMembers.concat(members); ///[...currentMembers, ...members];
- bandMembers.set(band, {
- ...currentValue,
- members: new Set(newMembers)
- });
- }
- }
- function addBandTime(band, time) {
- if (bandMembers.has(band)) {
- const value = bandMembers.get(band);
- const members = value.members;
- const currentTime = value.time;
- bandMembers.set(band, {
- members,
- time: (currentTime || 0) + time
- });
- } else {
- bandMembers.set(band, {
- time
- });
- }
- }
- function getTotalTime() {
- let totalTime = 0;
- for (const [, value] of bandMembers.entries()) {
- const { time } = value;
- totalTime += time;
- }
- return totalTime;
- }
- function sortBandByTimePlayed() {
- const sortedBands = new Map([...bandMembers.entries()].sort((a, b) => b[1].time - a[1].time || a[0].localeCompare(b[0])));
- return sortedBands;
- }
- function logBandAndTimePlayed(bands) {
- for (const [band, value] of bands.entries()) {
- console.log(`${band} -> ${value.time}`);
- }
- }
- function logBandAndMembers(band) {
- console.log(band);
- const { members } = bandMembers.get(band);
- for (const member of members) {
- console.log(`=> ${member}`);
- }
- }
- let bandToLog = input[input.length - 1];
- for (let line of input) {
- if (line === 'start of concert') {
- break;
- }
- let [command, band, otherParams] = line.split('; ');
- if (command === 'Play') {
- let playTime = parseInt(otherParams);
- addBandTime(band, playTime);
- } else if (command === 'Add') {
- let members = otherParams.split(', ');
- saveBandsAndMembers(band, members);
- }
- }
- const totalTime = `Total time: ${getTotalTime()}`;
- console.log(totalTime);
- const sortedBands = sortBandByTimePlayed();
- logBandAndTimePlayed(sortedBands);
- logBandAndMembers(bandToLog);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement