Todorov_Stanimir

01. Feed the Animals

Jun 17th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function feedTheAnimals (animals) {
  2.     let hungryAnimals = new Map();
  3.     let areas = new Map();
  4.     let command = '';
  5.     while (command !== 'Last Info') {
  6.         [command, nameAnimal, dailyFoodLimit, area] = command.split(':');
  7.         dailyFoodLimit = parseInt(dailyFoodLimit);
  8.         if (command === 'Add') {
  9.             if (!hungryAnimals.has(nameAnimal)) {
  10.                 hungryAnimals.set(nameAnimal, dailyFoodLimit);
  11.                 if (!areas.has(area)) {
  12.                     areas.set(area, [nameAnimal]);
  13.                 } else {
  14.                     areas.get(area).push(nameAnimal);
  15.                 }
  16.             } else {
  17.                 hungryAnimals.set(nameAnimal, hungryAnimals.get(nameAnimal) + dailyFoodLimit);
  18.             }
  19.  
  20.         } else if (command === 'Feed') {
  21.             if (hungryAnimals.has(nameAnimal)) {
  22.                 if (hungryAnimals.get(nameAnimal) <= dailyFoodLimit) {
  23.                     hungryAnimals.delete(nameAnimal);
  24.                     areas.get(area).splice(areas.get(area).indexOf(nameAnimal), 1);
  25.                     console.log(`${nameAnimal} was successfully fed`);
  26.                 } else {
  27.                     hungryAnimals.set(nameAnimal, hungryAnimals.get(nameAnimal) - dailyFoodLimit);
  28.                 }
  29.             }
  30.         }
  31.         command = animals.shift();
  32.     }
  33.  
  34.     let outputAnimals = [...hungryAnimals.entries()];
  35.     outputAnimals.sort((a, b) => {
  36.         if (a[1] > b[1]) {
  37.             return -1;
  38.         } else if (a[1] < b[1]) {
  39.             return 1;
  40.         } else if (a[1] === b[1]) {
  41.             for (let index = 0; index < Math.max(a[0].length, b[0].length); index++) {
  42.                 if (a[0][index] > b[0][index]) {
  43.                     return 1;
  44.                 } else if (a[0][index] < b[0][index]) {
  45.                     return -1;
  46.                 }
  47.             }
  48.         }
  49.     });
  50.  
  51.     let outputAreas = [...areas.entries()];
  52.     outputAreas.sort((a, b) => {
  53.         if (a[1].length > b[1].length) {
  54.             return -1;
  55.         } else if (a[1].length < b[1].length) {
  56.             return 1;
  57.         }
  58.     });
  59.     console.log('Animals:');
  60.     outputAnimals.forEach(el => {
  61.         console.log(`${el[0]} -> ${el[1]}g`);
  62.     });
  63.     console.log('Areas with hungry animals:');
  64.     outputAreas.forEach(el => {
  65.         if (el[1].length > 0) {
  66.             console.log(`${el[0]} : ${el[1].length}`);
  67.         }
  68.     });
  69. }
Advertisement
Add Comment
Please, Sign In to add comment