Advertisement
Lulunga

Final Exam 01.Concert

Jul 27th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. function solve(input) {
  3.  
  4.  
  5.     const bandMembers = new Map();
  6.     function saveBandsAndMembers(band, members) {
  7.         if (!bandMembers.has(band)) {
  8.             bandMembers.set(band, {
  9.                 members: new Set(members)
  10.             });
  11.         } else {
  12.             const currentValue = bandMembers.get(band);
  13.             const currentMembers = Array.from(currentValue.members || []);
  14.             const newMembers = currentMembers.concat(members); ///[...currentMembers, ...members];
  15.             bandMembers.set(band, {
  16.                 ...currentValue,
  17.                 members: new Set(newMembers)
  18.             });
  19.         }
  20.     }
  21.  
  22.     function addBandTime(band, time) {
  23.         if (bandMembers.has(band)) {
  24.             const value = bandMembers.get(band);
  25.             const members = value.members;
  26.             const currentTime = value.time;
  27.             bandMembers.set(band, {
  28.                 members,
  29.                 time: (currentTime || 0) + time
  30.             });
  31.         } else {
  32.             bandMembers.set(band, {
  33.                 time
  34.             });
  35.         }
  36.     }
  37.  
  38.     function getTotalTime() {
  39.         let totalTime = 0;
  40.         for (const [, value] of bandMembers.entries()) {
  41.             const { time } = value;
  42.             totalTime += time;
  43.         }
  44.         return totalTime;
  45.     }
  46.  
  47.     function sortBandByTimePlayed() {
  48.         const sortedBands = new Map([...bandMembers.entries()].sort((a, b) => b[1].time - a[1].time || a[0].localeCompare(b[0])));
  49.         return sortedBands;
  50.     }
  51.  
  52.     function logBandAndTimePlayed(bands) {
  53.         for (const [band, value] of bands.entries()) {
  54.             console.log(`${band} -> ${value.time}`);
  55.         }
  56.     }
  57.  
  58.     function logBandAndMembers(band) {
  59.         console.log(band);
  60.         const { members } = bandMembers.get(band);
  61.         for (const member of members) {
  62.             console.log(`=> ${member}`);
  63.         }
  64.     }
  65.     let bandToLog = input[input.length - 1];
  66.     for (let line of input) {
  67.         if (line === 'start of concert') {
  68.             break;
  69.         }
  70.         let [command, band, otherParams] = line.split('; ');
  71.         if (command === 'Play') {
  72.             let playTime = parseInt(otherParams);
  73.             addBandTime(band, playTime);
  74.  
  75.         } else if (command === 'Add') {
  76.             let members = otherParams.split(', ');
  77.             saveBandsAndMembers(band, members);
  78.         }
  79.     }
  80.     const totalTime = `Total time: ${getTotalTime()}`;
  81.     console.log(totalTime);
  82.     const sortedBands = sortBandByTimePlayed();
  83.     logBandAndTimePlayed(sortedBands);
  84.     logBandAndMembers(bandToLog);
  85.  
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement