Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //problem 2 - Travellers Log - 100/100
- function travellersLog(input) {
- let travellers = {};
- let result = [];
- let exec1;
- let exec2;
- for (let lineInput of input) {
- let line = lineInput.trim();
- exec1 = /([A-Za-z]+)\s+gets\s+(\d+)/g.exec(line)
- exec2 = /([A-Za-z]+)\s+visited\s+the\s+([A-Za-z]+)\s+in\s+([A-Za-z]+)\s+-\s+(\d+)/g.exec(line)
- if(exec1) {
- let traveller = exec1[1];
- let cash = +exec1[2];
- if(!travellers.hasOwnProperty(traveller)) {
- travellers[traveller] = {};
- travellers[traveller].cash = 0;
- }
- travellers[traveller].cash += cash;
- }
- if (exec2) {
- let traveller = exec2[1];
- let landmark = exec2[2];
- let country = exec2[3];
- let cost = +exec2[4];
- if(!travellers.hasOwnProperty(traveller)) {
- travellers[traveller] = {};
- travellers[traveller].cash = 0;
- }
- if (travellers.hasOwnProperty(traveller) && travellers[traveller].cash >= cost){
- if(!travellers[traveller].hasOwnProperty(country)) {
- travellers[traveller][country] = [];
- }
- if(!travellers[traveller][country].includes(landmark)) {
- travellers[traveller][country].push(landmark);
- travellers[traveller].cash -= cost;
- }
- } else if (travellers[traveller].cash < cost) {
- if(travellers[traveller].hasOwnProperty(country)) {
- if(travellers[traveller][country].includes(landmark)) {
- continue;
- }
- }
- result.push(`Not enough money to visit ${landmark}`)
- }
- }
- }
- let sortedTravellers = Object.keys(travellers)
- .sort((t1, t2) =>
- Object.keys(travellers[t2]).filter(p => p !== 'cash').length - Object.keys(travellers[t1]).filter(p => p !== 'cash').length);
- for (const key of sortedTravellers) {
- result.push(`${key} visited ${Object.keys(travellers[key]).length - 1} countries and has ${travellers[key].cash} money left`);
- let sortedCountries = Object.keys(travellers[key])
- .filter(p => p !== 'cash')
- .sort((c1, c2) => Object.keys(travellers[key][c2]).length - Object.keys(travellers[key][c1]).length);
- for (const country of sortedCountries) {
- result.push(`- ${country} -> ${Object.keys(travellers[key][country]).length} landmarks`);
- travellers[key][country]
- .sort((a, b) => a.localeCompare(b))
- .forEach( l =>
- result.push(`-- ${l}`)
- );
- }
- }
- return result.join('\n');
- }
- console.log(travellersLog(
- ['Peter gets 100',
- 'Peter visited the StatueOfLiberty in USA - 50',
- 'Bill gets 250',
- 'Tim visited the ChristTheRedeemer in Brazil - 150',
- 'Bill gets 400',
- 'Bill visited the MountFuji in Japan - 600',
- 'Bill visited the TeatroAmazonas in Brazil - 50',
- 'Bill gets 150',
- 'Bill visited the ChristTheRedeemer in Brazil - 150',
- 'Tim gets 500',
- 'Bill visited the StatueOfLiberty in USA - 440',
- 'Tim visited the StatueOfLiberty in USA - 440',
- 'Maria gets 650',
- 'Maria visited the StatueOfLiberty in USA - 440',
- 'Maria visited the CapeCod in USA - 100']
- ));
- console.log(travellersLog(
- ['Peter gets 100',
- 'Peter visited the StatueOfLiberty in USA - 50',
- 'Bill gets 250',
- 'Bill gets 400',
- 'Peter gets 150',
- 'Peter visited the ChristTheRedeemer in Brazil - 150']
- ));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement