What is your hint or solution suggestion?
This isn’t the fastest solution, but it’s one of the simplest solutions. The key equation for coin counting is equal to 25*q + 10*d + 5*n + 5*p = 100
. In this case, we can see that pennies can only be counted in batches of five for this problem, hence why there is a coefficient of 5 for p.
The limits for (q,d,n,p)
are (0-3,0-9,0-19,and 0-19)
. All possible subarrays of [q,d,n,p]
are created, then Array.map
is used to plug them into the equation 25*q + 10*d + 5*n + 5*p
. Then, the values are filtered so that only instances where the equation is equal to 100 remain. There are 238 instances, as I left off the 4 cases where all coins are the same, and 238+4 = 242.
Note: If you want to try something faster, learn about what is “Dynamic Programming”.
Solution 1
function countCoins() {
var quarter = Array.from(Array(4).keys());
var dime = Array.from(Array(10).keys());
var nickel = Array.from(Array(20).keys());
var penny = Array.from(Array(20).keys());
var parts = [quarter,dime,nickel,penny],
result = parts.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []));
var result1 = result.map((sub) => sub[0]*25 + sub[1]*10 + sub[2]*5 + sub[3]*5);
const result2 = new Map([...new Set(result1)].map(
x => [x, result1.filter(y => y === x).length]
));
return result2.get(100)+4;
}
Challenge: Count the coins
Link to the challenge: