Todorov_Stanimir

04. Roli The Coder

Jul 29th, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. roliTheCoder = (input) => {
  2.     let patternId = /[\d]+/g;
  3.     let patternName = /^[#][^#]+$/g;
  4.     let patternParticipant = /^[@][a-z0-9'-]+$/gi
  5.     let events = {};
  6.     for (let line of input) {
  7.         if (line === 'Time for Code') {
  8.             break;
  9.         }
  10.         let tokens = line.split(' ').filter(el => el !== '');
  11.         let id = tokens.shift();
  12.         let idIsCorrect = false;
  13.         if (id.match(patternId)) {
  14.             idIsCorrect = true;
  15.             id = Number(id);
  16.         }
  17.         let name = tokens.shift().trim();
  18.         let nameIsCorrect = false;
  19.         if (name.match(patternName)) {
  20.             nameIsCorrect = true;
  21.             name = name.substring(1)
  22.         }
  23.         let participants = [];
  24.         tokens.forEach(participant => {
  25.             if (participant.match(patternParticipant) && !participants.includes(participant)) {
  26.                 participants.push(participant);
  27.             }
  28.         });
  29.         if (idIsCorrect && nameIsCorrect && !events[id]) {
  30.             events[id] = { name, length: participants.length, participants }
  31.         } else if (idIsCorrect && nameIsCorrect && events[id].name === name) {
  32.             let newParticipants = events[id].participants.concat(participants);
  33.             newParticipants = newParticipants.filter((participant, index) => newParticipants.indexOf(participant)===index)
  34.             if (newParticipants.length >= 0) {
  35.                 events[id] = { name, length: newParticipants.length, participants:newParticipants };
  36.             }
  37.         }
  38.     }
  39.  
  40.     Object.entries(events)
  41.         .sort((a, b) => b[1].length - a[1].length || a[1].name.localeCompare(b[1].name))
  42.         .forEach(event => {
  43.             console.log(`${event[1].name} - ${event[1].length}`)
  44.             event[1].participants.sort((a, b) => a.localeCompare(b)).forEach(participant => console.log(`${participant}`));
  45.         });
  46. }
Advertisement
Add Comment
Please, Sign In to add comment