[04.26.22] Coding test

Juyeon.it·2022년 4월 26일
0

Coding test

목록 보기
15/32

Pete, the baker

Description

Pete likes to bake some cakes. He has some recipes and ingredients. Unfortunately he is not good in maths. Can you help him to find out, how many cakes he could bake considering his recipes?
Write a function cakes(), which takes the recipe (object) and the available ingredients (also an object) and returns the maximum number of cakes Pete can bake (integer). For simplicity there are no units for the amounts (e.g. 1 lb of flour or 200 g of sugar are simply 1 or 200). Ingredients that are not present in the objects, can be considered as 0.
Examples:
// must return 2
cakes({flour: 500, sugar: 200, eggs: 1}, {flour: 1200, sugar: 1200, eggs: 5, milk: 200});
// must return 0
cakes({apples: 3, flour: 300, sugar: 150, milk: 100, oil: 100}, {sugar: 500, flour: 2000, milk: 2000});

My answer

function cakes(recipe, available) {
  const recipeKeys = Object.keys(recipe);
  const availableKeys = Object.keys(available); 
  let result = 0;
  
  for (let i = 0; i < recipeKeys.length; i++) {
    if (availableKeys.includes(recipeKeys[i])) {
      let num = parseInt(available[recipeKeys[i]] / recipe[recipeKeys[i]]);
      result = (result === 0 || result > num) ? num : result;
    } else { return 0 }
  }
  
  return result;
}

Other solutions

function cakes(recipe, available) {
  return Object.keys(recipe).reduce(function(val, ingredient) {
    return Math.min(Math.floor(available[ingredient] / recipe[ingredient] || 0), val)
  }, Infinity)  
}
const cakes = (needs, has) => Math.min(
  ...Object.keys(needs).map(key => Math.floor(has[key] / needs[key] || 0))
)

0개의 댓글

관련 채용 정보