В этом твите перечислены возможные заказы на крылья китайского ресторана 1 :
При заказе пиццы я обычно рассчитываю, какой размер дает мне лучшее соотношение цены и качества пиццы, что является простым расчетом. Однако свести к минимуму цену заказа в этом ресторане не так просто, поэтому я бы хотел подготовиться к следующему заказу.
Вызов
Если задано целое число, большее или равное , ваша задача - вернуть один возможный заказ, который минимизирует цену (в целом самая дешевая) и количество сделок.
пример
Если бы я заказал Wings, оказалось, что лучшая сделка обойдется в . Однако есть несколько заказов, которые будут стоить эту сумму, а именно:
[50,50],[25,25,50],[25,25,25,25]
Поскольку первый заказ будет использовать наименьшее количество сделок ( ), результат будет[50,50]
.
правила
- На входе будет некоторое целое число
- Вывод будет список / массив / ... размеров заказа, которые в сумме до и минимизируют цену заказа
- Вы можете вернуть все возможные заказы
Testcases
4 -> [4] (4.55)
23 -> [23] (26.10)
24 -> [6,18],[9,15],[12,12] (27.20)
31 -> [6,25] (34.60)
32 -> [4,28],[6,26],[7,25] (35.75)
33 -> [4,29],[5,28],[6,27],[7,26],[8,25] (36.90)
34 -> [6,28],[9,25] (38.00)
35 -> [35] (39.15)
125 -> [125] (139.00)
200 -> [25,50,125] (222.40)
201 -> [26,50,125] (223.55)
250 -> [125,125] (278.00)
251 -> [26,50,50,125] (279.15)
418 -> [15,28,125,125,125],[18,25,125,125,125] (465.20)
1001 -> [26,50,50,125,125,125,125,125,125,125] (1113.15)
12345 -> [15,80,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125],[25,70,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125],[45,50,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125] (13728.10)
Примечание. В этих тестовых примерах перечислены все возможные выходные данные, включая цену, вам нужно только вывести один, и вы не обязаны выводить цену!
1: Вы можете найти данные как CSV здесь .
Ответы:
JavaScript (ES6), 123 байта
Возвращает заказ в виде строки через пробел.
Попробуйте онлайн!
Как?
источник
JavaScript (Node.js) ,
112108106105 байтПопробуйте онлайн!
Оптимизировано из ответа Арно
Различия
467 байт сохранено)источник
Retina 0.8.2 ,
160155 байтПреобразовать в одинарный.
Повторяйте до тех пор, пока не будет куплено больше сделок.
Найти способ покупки сделок и захватить и дублировать одну из сделок.
Сделки приобретаются на следующих условиях:
Купите 80 крыльев, если это оставляет 0, 6, 9, 12, 15, 18, 25 или 28 крыльев.
Купите 70 крыльев, если это все, что нам нужно.
Купите 9 крыльев, если осталось 15 или 40 крыльев.
Купите 30, 35, 40 или 45 крыльев, если это все, что нам нужно.
Купите 26, 27, 28 или 29 крыльев, если это все, что нам нужно.
Купите от 4 до 23 крыльев, если это все, что нам нужно.
Купите 125, 50 или 25 крыльев, если мы можем, и если мы еще можем купить больше крыльев точно. Обратите внимание, что у нас есть эти варианты в конце чередования, так что точные покупки проверяются в первую очередь.
источник