Advertisement
Todorov_Stanimir

04. ForceBook Fundamentals Exam - 04 March 2018 Part II

Jul 26th, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. forceBook = (input) => {
  2.     let users = [];
  3.     let sites = {};
  4.     while ((line = input.shift()) !== 'Lumpawaroo') {
  5.         if (line.includes(' | ')) {
  6.             let [site, user] = line.split(' | ');
  7.             if (!users.includes(user)) {
  8.                 addSiteAndUserToIt(site, user);
  9.                 users.push(user);
  10.             }
  11.         } else {
  12.             let [user, site] = line.split(' -> ');
  13.             if (!users.includes(user)) {
  14.                 addSiteAndUserToIt(site, user);
  15.                 users.push(user);
  16.             } else {
  17.                 for (let checkedSite in sites) {
  18.                     if (sites[checkedSite].users.includes(user)) {
  19.                         sites[checkedSite].users.splice(sites[checkedSite].users.indexOf(user), 1);
  20.                         sites[checkedSite].members--;
  21.                         addSiteAndUserToIt(site, user);
  22.                         break;
  23.                     }
  24.                 }
  25.             }
  26.             console.log(`${user} joins the ${site} side!`);
  27.         }
  28.     }
  29.     Object.entries(sites).filter(site => site[1].members !== 0).sort((a, b) => b[1].members - a[1].members || a[0].localeCompare(b[0]))
  30.         .forEach(site => {
  31.             console.log(`Side: ${site[0]}, Members: ${site[1].members}`);
  32.             site[1].users.sort((a, b) => a.localeCompare(b)).forEach(user => console.log(`! ${user}`));
  33.         });
  34.  
  35.     function addSiteAndUserToIt(site, user) {
  36.         if (!(site in sites)) {
  37.             sites[site] = { members: 0, users: [] }
  38.         }
  39.         sites[site].members++;
  40.         sites[site].users.push(user);
  41.     }
  42. }
  43. forceBook(['Light | Gosho',
  44.     'Dark | Pesho',
  45.     'Lumpawaroo'
  46. ]);
  47. forceBook(['Lighter | Royal',
  48.     'Darker | DCay',
  49.     'Ivan Ivanov -> Lighter',
  50.     'DCay -> Lighter',
  51.     'Lumpawaroo'
  52. ])
  53. // Results:
  54. // Side: Dark, Members: 1
  55. // ! Pesho
  56. // Side: Light, Members: 1
  57. // ! Gosho
  58. // Ivan Ivanov joins the Lighter side!
  59. // DCay joins the Lighter side!
  60. // Side: Lighter, Members: 3
  61. // ! DCay
  62. // ! Ivan Ivanov
  63. // ! Royal
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement