ローン “寛大な”金額

前書き

あなたにはあなたにローンを依頼している友人がいて、あなたはそれに疲れています。今日、彼は再びローンに来ました。彼のオファーを断るのではなく、できるだけ多くのコイン/請求書を彼に渡すことによってあなたの友人を奪ってください。

チャレンジ

You will take as input: the amount of money your friend wants a
loan for and the amount of coins/bills you have. For this チャレンジ,
the possible denominations are $20.00, $10.00, $5.00, $2.00, $1.00,
$0.25, $0.10, $0.05, and $0.01. An example of input is 5.67,
[5, 3, 4, 5, 5, 9, 8, 1, 2]
if you friend wants $5.67 and
you have 5 $20 bills, 3 $10 bills, etc. Your output will be the
amount of coins/bills that gives your friend as much
metal/paper/plastic as possible.

あなたの友人に彼が望む正確な金額を与えることができない場合は、あなたが支払うことができる金額のうち、彼が望むものよりも大きい金額を彼に与えてください。たとえば、あなたの友人が$
0.07を望んでいて、 [0、0、0、0、0、2、4、2、0]
しか持っていない場合、可能な限り多くのコインを彼に与えないだろう!)。

あなたの友人があなたよりも多くのお金を望むなら、彼にあなたのお金をすべて贈ってください(そして何か買う必要はないと祈ってください)。

テストケース

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]

This is
so shortest code wins.

ベストアンサー

Clean, 167 bytes

import StdEnv
@n l#m=[p\p<-[[if(y==u)(x-1)x\x<-l&y<-[0..]]\u<-[0..]&v<-l|v>0]|sum[a*b\a<-[2000,1000,500,200,100,25,10,5,1]&b<-p]>=toInt(n*100.0)]
|m>[]= @n(hd m)=l

Real[Int] を取って、 @
関数を定義します。

Try it
online!

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です