Задача о количестве пирогов

Мне подкинули вот такую задачку.

Петя любит печь пироги. У него есть его любимый рецепт и определённое количество ингредиентов. Сколько он сможет испечь любимых пирогов? Необходимо написать функцию, на вход которой подаётся два словаря: первый содержит пары {ингредиент: необходимое_количество_для_рецепта}, а второй — {ингредиент: доступное_количество}. Ингредиенты, не указанные во втором списке, отсутствуют.

Тест-кейсы:

cakes({"flour": 500, "sugar": 200, "eggs": 1}, {"flour": 1200, "sugar": 1000, "eggs": 5, "milk": 200}) # answer: 2
cakes({"apples": 2, "flour": 300, "milk": 100, "sugar": 100}, {"sugar": 500, "milk": 2000}) # answer: 0
cakes({"flour": 200, "sugar": 200, "eggs": 1}, {"sugar": 200, "flour": 200, "eggs": 1}) #answer: 1

Вот, как я решил задачу:

def cakes(recipe, ingredients):
    values = list()
    for recipe_key in recipe:
        if recipe_key in ingredients:
            values.append(ingredients[recipe_key] // recipe[recipe_key])
        else:
            return 0
    return min(values)

А вот, как её можно было решить. Этот вариант подсказал модератор чата. Минус, который я нашёл в таком решении: функция будет перебирать значения до самого конца, даже если сразу будет очевидно, что пирог мы не приготовим.

def cakes(recipe, ingredients):
    return min(ingredients.get(ingredient, 0) // recipe[ingredient] for ingredient in recipe)

Красиво, чисто, лаконично. Мне к такому ещё стремиться и стремиться)

Поделиться
Отправить
 50   4 мес   задачи
Популярное