Wprowadzenie
Masz przyjaciela, który ciągle prosi cię o pożyczki i masz już tego dość. Dziś znów przyszedł po pożyczkę. Zamiast odrzucić jego ofertę, masz świetny pomysł: trolluj swojego przyjaciela, dając mu jak najwięcej monet / rachunków.
Wyzwanie
Weźmiesz jako dane wejściowe: kwotę pieniędzy, na którą przyjaciel chce pożyczki, oraz liczbę posiadanych monet / rachunków. W przypadku tego wyzwania możliwe nominały to 20,00 USD, 10,00 USD, 5,00 USD, 2,00 USD, 1,00 USD, 0,25 USD, 0,10 USD, 0,05 USD i 0,01 USD. Przykładem wkładu jest, 5.67, [5, 3, 4, 5, 5, 9, 8, 1, 2]
jeśli twój przyjaciel chce 5,67 $ i masz 5 banknotów 20 $, 3 rachunki 10 $ itp. Twój wynik wyniesie tyle monet / rachunków, które dadzą Twojemu przyjacielowi jak najwięcej metalu / papieru / plastiku.
Jeśli nie jest możliwe podanie przyjacielowi dokładnie takiej kwoty, jakiej chce, daj mu najbliższą kwotę, jaką możesz zapłacić, większą niż to, czego on chce. Na przykład, jeśli twój przyjaciel chce 0,07 $, a ty masz tylko [0, 0, 0, 0, 0, 2, 4, 2, 0]
, daj mu 2 monety 0,05 $ (nie 1 0,10 $, ponieważ nie dałoby mu to jak największej liczby monet!).
Jeśli twój przyjaciel chce więcej pieniędzy niż ty, daj mu wszystkie pieniądze (i módl się, abyś nie musiał niczego kupować).
Przypadki testowe
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]
To jest golf golfowy, więc wygrywa najkrótszy kod.
2.00
i20.00
ale nie0.2
lub0.02
:(Odpowiedzi:
Czysty , 167 bajtów
Definiuje funkcję
@
, biorącReal
i[Int]
.Wypróbuj online!
źródło
JavaScript, 213 bajtów
Jest to dość powolna i kosztowna pamięć, więc wypróbuj tylko małe skrzynki
źródło
Kotlin , 298 bajtów
Upiększony
Test
Przykład 4 powoduje OutOfMemory, ale pozostałe 3 działają dobrze.
źródło