money 2
by krustnic
JavaScript
const moneyTypes = [5000, 1000, 500, 100, 30];
const moneyLimits = {
5000: 1,
1000: 2,
500: 2,
100: 2,
30: 5
}
function minInArray(arr, field) {
return arr.reduce((min, n) => {
if (min[field] > n[field]) return n
return min
})
}
function R(s, m) {
this.s = s
this.m = m
}
function minM(amount, out) {
out = out || {
5000: 0,
1000: 0,
500: 0,
100: 0,
30: 0
}
for(const m of moneyTypes) {
if (amount === m) {
out[m] += 1;
return new R(1, out)
}
}
let arr = []
for(const m of moneyTypes) {
if (m <= amount) {
const v = minM(amount - m, out)
if (v !== null) {
console.log(v)
const sum = Object.values(out).reduce((total, i) => {return total + i}, 0)
arr.push(new R(sum + 1 + v.s, v.m))
}
}
}
if (arr.length === 0) return null
const r = minInArray(arr, 's')
// out[r.m] = (out[r.m] || 0) + 1
// s = Math.min(...arr)
return r
}
const value = 200
const p = minM(value)
console.log('R: ', p)