nagpalh Ответов: 3

Алгоритм задачи покупки хлеба


Привет Ребята,

Недавно у меня был тест на кодирование для должности инженера-алгоритмиста в компании. Они поставили передо мной следующую задачу. Хотя я провалил задачу кодирования, но я хотел бы знать решение этой проблемы, чтобы увидеть, где я ошибся?

Проблема:

Вы живете в отдаленном поселке, куда периодически через нерегулярные промежутки времени приходят продавцы хлеба. Всякий раз, когда вы покупаете свежий хлеб, его хватает на 30 дней, пока он не становится слишком черствым, чтобы есть. Ваша семья съедает одну буханку хлеба в день.

Вам дается календарь, когда продавцы хлеба будут посещать вас в ближайшие дни, и цена, которую каждый продавец хлеба будет взимать за буханку. В настоящее время у вас есть 10 свежих хлебов, и в конце календаря вы получите кучу бесплатного хлеба, так что вам не нужно будет иметь его под рукой.

Напишите функцию, которая подскажет вам, сколько хлеба купить у каждого из продавцов

Ввод:

total_days - целое число, число дней в календаре, пока не придет бесплатный хлеб


sellers, - список пар целых чисел (день, цена). Каждая пара представляет одного продавца хлеба. День - это сколько дней от начала до прибытия продавца. Цена-это цена покупки каждой буханки хлеба у этого продавца, в копейках

Выход:

purchases, список целых чисел той же длины, что и продавцы. Каждое целое число-это то, сколько буханок вы должны купить у каждого продавца или None, если нет решения, которое не заставит вашу семью есть черствый хлеб в какой-то момент
Вы должны вывести план покупки, который минимизирует общую стоимость. В случае связей выведите план, который требует покупки у наименьшего количества разных продавцов, и в рамках тех Выберите план, который покупает больше хлеба раньше

Требования:

Пожалуйста, напишите хорошо отформатированную, легко читаемую функцию python calculate_purchasing_plan(total_days, sellers) в файле под названием
your_name.py это решает эту проблему, используя только стандартный python (т. е. никаких пакетов
требуемый).
Пожалуйста, включите комментарий в верхней части файла с вашим именем и электронной почтой, а также краткое описание
параграф, описывающий, почему алгоритм, который вы предоставили, должен работать.

Пример:

calculate_purchasing_plan(60, [(10,200), (15,100), (35,500), (50,30)])
[5, 30, 5, 10]


Я был бы очень признателен, если бы кто-нибудь мог пройти через мой код и рассказать мне о любом примере, который показывает, что код не дает минимальной стоимости.

Что я уже пробовал:

Я решил эту проблему, спасибо вам всем большое.

Gerry Schmitz

Может быть, "crrnt_breads" вместо "current_breads" сделал вас. Иногда это все, что требуется, если вы соревнуетесь с другими. Никто не получает баллов за тупость.

3 Ответов

Рейтинг:
5

Member 14798076

Ну, есть парень, который просит всех пройти этот тест, потому что он (предположительно) нанимает людей для своей команды. Но когда я сделал этот тест, я так и не получил ответа, и парень просто бесшумно исчез. Я думаю, что у него нет денег, а только промывание ушей. Поэтому не повторяйте ту же ошибку, Не программируйте никаких тестов перед собеседованием и не проверяйте, есть ли у кого-то средства для проекта.

Найдите готовый тест с объяснениями на моем GitHub, его в Rust:GitHub - nickhash/bbp: тест на ржавчину[^]


nagpalh

Да, я попросил их дать хотя бы обратную связь, но ответа не последовало.

Ваш код абсолютно верен. Вы рассмотрели все возможные сценарии. Я видел, что вы использовали сценарий нескольких продавцов хлеба в один день, я даже не думал об этом сценарии.

У меня есть предложение - было бы неплохо вывести ваш результат в виде словаря key=day-number и value=number-of-breads-buyed.
С уважением.

Рейтинг:
2

OriginalGriff

Цитата:
Я был бы очень признателен, если бы кто-нибудь мог дать решение этой проблемы.


Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.


nagpalh

@OriginalGriff

Спасибо за ваш комментарий. Я не имел в виду, что мне нужно решение, я объяснил, что принял этот вызов кодирования и не прошел его. Однако мне только что сказали, что мое решение не прошло необходимый порог. Я приложил свое решение, мне просто нужно, чтобы люди посмотрели на него, чтобы указать на какую-то ошибку или привести встречный пример, где алгоритм не работает.

Спасибо снова.

OriginalGriff

Это все еще твой вызов, твоя "домашняя работа", а не наша!
Так что начинайте тестировать то, что у вас есть. Посмотрите, что он делает. Посмотрите, что привело к тому, что он "не прошел необходимый порог" - потому что мы понятия не имеем, было ли это связано с точками стиля, точностью, производительностью или какой-то другой метрикой. Мы даже не имеем понятия, с какими метриками он тестируется и с какими данными ... так что наша поговорка "сделай это", вероятно, не поможет ему пройти.

nagpalh

@OriginalGriff

Спасибо, чувак. Ценить это.

Рейтинг:
15

Patrice T

Цитата:
но я хотел бы знать решение этой проблемы

На одного программиста приходится около 1 решения
Цитата:
где я ошибся?

Как программист, ваша задача также состоит в том, чтобы убедиться, что ваш код дает правильное решение. Для этого вы должны построить тестовые наборы данных, чтобы охватить различные ситуации, и проверить, что результат соответствует ожидаемому 1.
Анализ вашего кода-это реальная работа, в основном, нужно реконструировать ваш алгоритм из кода.
Цитата:
Пожалуйста, включите комментарий в верхней части файла с вашим именем и электронной почтой а также короткий

Я не вижу их в вашем коде.
Цитата:
короткий абзац, описывающий, почему алгоритм, который вы предоставили, должен работать.

Комментарии в вашем коде просто повторяют пункты требования, это не описание алгоритма.
Алгоритм может быть : обратный исчерпывающий поиск, рекурсивный или нет.