JSFiddle - React, Tailwind, and code Playground
by konijn_gmail_com
JavaScript
/* Euler 31 */
var allCoins = [1, 2, 5, 10, 20 ,50,100 , 200];
//var allCoins = [1, 2, 5,10,20];
var count = 0;
var combos = {};
function upgradedWallet( wallet , coin )
{
var newWallet = { coins : wallet.coins.slice(0) , sum : wallet.sum + coin };
newWallet.coins.push( coin );
return newWallet;
}
function checkWallet( target , wallet )
{
for( var i = 0 ; i < allCoins.length ; i++ )
{
var coin = allCoins[i];
if( wallet.sum + coin == target )
{
combos[ upgradedWallet( wallet , coin ).coins.sort().join("+") ] = true;
break;
}
if( wallet.sum + allCoins[i] < target )
{
checkWallet( target , upgradedWallet( wallet , coin ) );
}
}
}
checkWallet( 10 , { coins : [] , sum : 0 } );
var counter = 0;
for( key in combos )
{
console.log( counter++ , key );
}