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 );
}