Advertisement
Danny_Berova

02.TravellersLog

Oct 9th, 2018
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //problem 2 - Travellers Log - 100/100
  2. function travellersLog(input) {
  3.     let travellers = {};
  4.     let result = [];
  5.     let exec1;
  6.     let exec2;
  7.     for (let lineInput of input) {
  8.         let line = lineInput.trim();
  9.         exec1 = /([A-Za-z]+)\s+gets\s+(\d+)/g.exec(line)
  10.         exec2 = /([A-Za-z]+)\s+visited\s+the\s+([A-Za-z]+)\s+in\s+([A-Za-z]+)\s+-\s+(\d+)/g.exec(line)
  11.        
  12.         if(exec1) {
  13.             let traveller = exec1[1];
  14.             let cash = +exec1[2];
  15.             if(!travellers.hasOwnProperty(traveller)) {
  16.                 travellers[traveller] = {};
  17.                 travellers[traveller].cash = 0;
  18.             }
  19.             travellers[traveller].cash += cash;
  20.         }
  21.         if (exec2) {
  22.             let traveller = exec2[1];
  23.             let landmark = exec2[2];
  24.             let country = exec2[3];
  25.             let cost = +exec2[4];
  26.  
  27.             if(!travellers.hasOwnProperty(traveller)) {
  28.                 travellers[traveller] = {};
  29.                 travellers[traveller].cash = 0;
  30.             }
  31.  
  32.             if (travellers.hasOwnProperty(traveller) && travellers[traveller].cash >= cost){
  33.                 if(!travellers[traveller].hasOwnProperty(country)) {
  34.                     travellers[traveller][country] = [];
  35.                 }
  36.                 if(!travellers[traveller][country].includes(landmark)) {
  37.                     travellers[traveller][country].push(landmark);
  38.                     travellers[traveller].cash -= cost;
  39.                 }
  40.             } else if (travellers[traveller].cash < cost) {
  41.                 if(travellers[traveller].hasOwnProperty(country)) {
  42.                     if(travellers[traveller][country].includes(landmark)) {
  43.                         continue;
  44.                     }
  45.                 }
  46.                 result.push(`Not enough money to visit ${landmark}`)
  47.             }
  48.         }
  49.     }
  50.  
  51.     let sortedTravellers = Object.keys(travellers)
  52.         .sort((t1, t2) =>
  53.             Object.keys(travellers[t2]).filter(p => p !== 'cash').length - Object.keys(travellers[t1]).filter(p => p !== 'cash').length);
  54.        
  55.     for (const key of sortedTravellers) {
  56.         result.push(`${key} visited ${Object.keys(travellers[key]).length - 1} countries and has ${travellers[key].cash} money left`);
  57.        
  58.         let sortedCountries = Object.keys(travellers[key])
  59.         .filter(p => p !== 'cash')
  60.             .sort((c1, c2)  => Object.keys(travellers[key][c2]).length - Object.keys(travellers[key][c1]).length);
  61.        
  62.             for (const country of sortedCountries) {
  63.             result.push(`- ${country} -> ${Object.keys(travellers[key][country]).length} landmarks`);
  64.                
  65.             travellers[key][country]
  66.                 .sort((a, b) => a.localeCompare(b))
  67.                 .forEach( l =>
  68.                     result.push(`-- ${l}`)
  69.                 );
  70.         }
  71.     }
  72.     return result.join('\n');
  73. }
  74.  
  75. console.log(travellersLog(
  76.     ['Peter gets 100',
  77.     'Peter visited the StatueOfLiberty in USA - 50',
  78.     'Bill gets 250',
  79.     'Tim visited the ChristTheRedeemer in Brazil - 150',
  80.     'Bill gets 400',
  81.     'Bill visited the MountFuji in Japan - 600',
  82.     'Bill visited the TeatroAmazonas in Brazil - 50',
  83.     'Bill gets 150',
  84.     'Bill visited the ChristTheRedeemer in Brazil - 150',
  85.     'Tim gets 500',
  86.     'Bill visited the StatueOfLiberty in USA - 440',
  87.     'Tim visited the StatueOfLiberty in USA - 440',
  88.     'Maria gets 650',
  89.     'Maria visited the StatueOfLiberty in USA - 440',
  90.     'Maria visited the CapeCod in USA - 100']
  91. ));
  92.  
  93. console.log(travellersLog(
  94.     ['Peter gets 100',
  95.     'Peter visited the StatueOfLiberty in USA - 50',
  96.     'Bill gets 250',
  97.     'Bill gets 400',
  98.     'Peter gets 150',
  99.     'Peter visited the ChristTheRedeemer in Brazil - 150']
  100. ));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement