Este tweet enumera los posibles pedidos de Wings of a Chinese restaurant 1 :
Cuando ordeno pizza, generalmente calculo qué tamaño me da la mejor relación precio pizza, que es un cálculo simple. Sin embargo, minimizar el precio de un pedido en este restaurante no es una tarea tan simple, por lo que me gustaría estar preparado para mi próximo pedido allí.
Desafío
Dado un número entero mayor o igual a , su tarea es devolver un posible pedido que minimice el precio (en general más barato) y el número de ofertas.
Ejemplo
Si tuviera que pedir alas, resulta que la mejor oferta costará . Sin embargo, hay varios pedidos que costarán esa cantidad, a saber:
[50,50],[25,25,50],[25,25,25,25]
Dado que el primer pedido usará la menor cantidad de ofertas ( ), el resultado será [50,50]
.
Reglas
- La entrada será un número entero
- La salida será una lista / matriz / ... de tamaños de pedido que suman y minimizan el precio del pedido
- puedes elegir devolver todos los pedidos posibles
Casos de prueba
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)
Nota: ¡ Estos casos de prueba enumeran todas las salidas posibles, incluido el precio, solo se requiere que produzca una y no se requiere que envíe el precio!
1: Puede encontrar los datos como CSV aquí .
Respuestas:
JavaScript (ES6), 123 bytes
Devuelve el pedido como una cadena separada por espacios.
Pruébalo en línea!
¿Cómo?
fuente
JavaScript (Node.js) ,
112108106105 bytesPruébalo en línea!
Optimizado de la respuesta de Arnauld
Las diferencias
467 bytes guardados)fuente
Retina 0.8.2 ,
160155 bytesConvierte a unario.
Repita hasta que no se puedan comprar más ofertas.
Encuentre una forma de comprar ofertas y capture y duplique una de las ofertas.
Las ofertas se compran bajo las siguientes condiciones:
Compra 80 alas si eso deja 0, 6, 9, 12, 15, 18, 25 o 28 alas.
Compra 70 alas si eso es todo lo que necesitamos.
Compra 9 alas si eso deja 15 o 40 alas.
Compra 30, 35, 40 o 45 alas si eso es todo lo que necesitamos.
Compra 26, 27, 28 o 29 alas si eso es todo lo que necesitamos.
Compra de 4 a 23 alas si eso es todo lo que necesitamos.
Compre 125, 50 o 25 alas si podemos y si todavía podemos comprar más alas exactamente. Tenga en cuenta que tenemos estas opciones al final de la alternancia para que las compras exactas se prueben primero.
fuente