Introducción
Tienes un amigo que sigue pidiéndote préstamos y te estás cansando de ello. Hoy, volvió a pedir un préstamo. En lugar de rechazar su oferta, tienes una gran idea: trollea a tu amigo dándole tantas monedas / billetes como sea posible.
Desafío
Tomarás como entrada: la cantidad de dinero para la que tu amigo quiere un préstamo y la cantidad de monedas / billetes que tienes. Para este desafío, las denominaciones posibles son $ 20.00, $ 10.00, $ 5.00, $ 2.00, $ 1.00, $ 0.25, $ 0.10, $ 0.05 y $ 0.01. Un ejemplo de entrada es 5.67, [5, 3, 4, 5, 5, 9, 8, 1, 2]
si su amigo quiere $ 5.67 y tiene 5 billetes de $ 20, 3 billetes de $ 10, etc. Su producción será la cantidad de monedas / billetes que le da a su amigo la mayor cantidad de metal / papel / plástico posible.
Si no es posible darle a su amigo la cantidad exacta de dinero que desea, dele la cantidad de dinero más cercana que pueda pagar que sea mayor de lo que él quiere. Por ejemplo, si tu amigo quiere $ 0.07 pero tú solo tienes [0, 0, 0, 0, 0, 2, 4, 2, 0]
, dale 2 monedas de $ 0.05 (¡no 1 $ 0.10 porque eso no le daría tantas monedas como sea posible!).
Si tu amigo quiere más dinero del que tú tienes, dale todo tu dinero (y reza para que no necesites comprar nada).
Casos de prueba
Input: 6.54, [9, 8, 7, 6, 5, 4, 3, 2, 4]
Output: [0, 0, 0, 1, 4, 1, 2, 1, 4]
Input: 2, [0, 1, 0, 0, 0, 0, 0, 0, 0]
Output: [0, 1, 0, 0, 0, 0, 0, 0, 0]
Input: 9999, [0, 0, 0, 0, 0, 0, 0, 0, 1]
Output: [0, 0, 0, 0, 0, 0, 0, 0, 1]
Input: 0, [99, 99, 99, 99, 99, 99, 99, 99, 99]
Output: [0, 0, 0, 0, 0, 0, 0, 0, 0]
Este es el código de golf, por lo que gana el código más corto.
2.00
y20.00
pero no0.2
o0.02
:(Respuestas:
Limpio , 167 bytes
Define la función
@
, tomandoReal
y[Int]
.Pruébalo en línea!
fuente
JavaScript, 213 bytes
Es bastante lento y cuesta memoria, así que solo pruebe casos pequeños
fuente
Kotlin , 298 bytes
Embellecido
Prueba
El ejemplo 4 causa OutOfMemory, pero los otros 3 funcionan bien.
fuente