Advertisement
PPetkov2000

JS Fundamentals: - Legendary Farming

Mar 3rd, 2020
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(params) {
  2.   let str = params.split(" ");
  3.  
  4.   const materials = {};
  5.  
  6.   const legendaryItems = {
  7.     shards: "Shadowmourne",
  8.     fragments: "Valanyr",
  9.     motes: "Dragonwrath"
  10.   };
  11.  
  12.   let result = "";
  13.  
  14.   for (let i = 0; i < str.length; i += 2) {
  15.     let quantity = Number(str[i]);
  16.     let material = str[i + 1].toLowerCase();
  17.  
  18.     if (!materials.hasOwnProperty(material)) {
  19.       materials[material] = 0;
  20.     }
  21.  
  22.     materials[material] += quantity;
  23.  
  24.     if (materials[material] >= 250) {
  25.       result += `${legendaryItems[material]} obtained!\n`;
  26.       materials[material] -= 250;
  27.       break;
  28.     }
  29.   }
  30.  
  31.   for (let item in legendaryItems) {
  32.     if (!materials.hasOwnProperty(item)) {
  33.       materials[item] = 0;
  34.     }
  35.   }
  36.  
  37.   const legendaryItemsCollected = Object.entries(materials)
  38.     .filter(item => hasLegendaryItems(legendaryItems, item[0]))
  39.     .sort(
  40.       (a, b) => sortDescending(a[1], b[1]) || sortAlphabetically(a[0], b[0])
  41.     )
  42.     .map(formatText)
  43.     .join("\n");
  44.  
  45.   const junkItemsCollected = Object.entries(materials)
  46.     .filter(item => !hasLegendaryItems(legendaryItems, item[0]))
  47.     .sort((a, b) => sortAlphabetically(a[0], b[0]))
  48.     .map(formatText)
  49.     .join("\n");
  50.  
  51.   result += legendaryItemsCollected + "\n" + junkItemsCollected;
  52.  
  53.   function hasLegendaryItems(items, item) {
  54.     return items.hasOwnProperty(item);
  55.   }
  56.  
  57.   function formatText(textArr) {
  58.     return `${textArr[0]}: ${textArr[1]}`;
  59.   }
  60.  
  61.   function sortAlphabetically(a, b) {
  62.     return a.localeCompare(b);
  63.   }
  64.  
  65.   function sortDescending(a, b) {
  66.     return b - a;
  67.   }
  68.  
  69.   return result;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement