N = 1000
def method_name n
w_coins = [1, 5, 10, 50, 100, 500]
return false if (n < 0) or (n > w_coins.inject(:+) * N)
w_n = n
w_ret = [0] * w_coins.size
(w_coins.size - 1).downto(0) { |i|
w_ret[i] = w_n / w_coins[i]
w_n -= w_coins[i] * w_ret[i]
if w_ret[i] > N
w_n += w_coins[i] * (w_ret[i] - N)
w_ret[i] = N
end
}
w_ret
end
[-1, 0, 1111, 666000, 666001].map{|e|
w_ret = method_name e
if w_ret
p [e, w_ret.join(',')]
else
p [e, 'error']
end
}
TiA9IDEwMDAKCmRlZiBtZXRob2RfbmFtZSBuCiAgd19jb2lucyA9IFsxLCA1LCAxMCwgNTAsIDEwMCwgNTAwXQoKICByZXR1cm4gZmFsc2UgaWYgKG4gPCAwKSBvciAobiA+IHdfY29pbnMuaW5qZWN0KDorKSAqIE4pCiAgd19uID0gbgogIHdfcmV0ID0gWzBdICogd19jb2lucy5zaXplCiAgKHdfY29pbnMuc2l6ZSAtIDEpLmRvd250bygwKSB7IHxpfAogICAgd19yZXRbaV0gPSB3X24gLyB3X2NvaW5zW2ldCiAgICB3X24gLT0gd19jb2luc1tpXSAqIHdfcmV0W2ldCiAgICBpZiB3X3JldFtpXSA+IE4KICAgICAgd19uICs9IHdfY29pbnNbaV0gKiAod19yZXRbaV0gLSBOKQogICAgICB3X3JldFtpXSA9IE4KICAgIGVuZAogIH0KICB3X3JldAplbmQKClstMSwgMCwgMTExMSwgNjY2MDAwLCA2NjYwMDFdLm1hcHt8ZXwKICB3X3JldCA9IG1ldGhvZF9uYW1lIGUKICBpZiB3X3JldAogICAgcCBbZSwgd19yZXQuam9pbignLCcpXQogIGVsc2UKICAgIHAgW2UsICdlcnJvciddCiAgZW5kCn0KCg==
[-1, "error"]
[0, "0,0,0,0,0,0"]
[1111, "1,0,1,0,1,2"]
[666000, "1000,1000,1000,1000,1000,1000"]
[666001, "error"]