There are four types of common coins in   US   currency:

   quarters   (25 cents)
   dimes   (10 cents)
   nickels   (5 cents),   and 
   pennies   (1 cent) 


There are six ways to make change for 15 cents:

   A dime and a nickel 
   A dime and 5 pennies
   3 nickels
   2 nickels and 5 pennies
   A nickel and 10 pennies
   15 pennies


Task

How many ways are there to make change for a dollar using these common coins?     (1 dollar = 100 cents).



Optional

Less common are dollar coins (100 cents);   and very rare are half dollars (50 cents).   With the addition of these two coins, how many ways are there to make change for $1000?

(Note:   the answer is larger than   232).



References

 an algorithm from the book Structure and Interpretation of Computer Programs.
 an article in the algorithmist.
 Change-making problem on Wikipedia.


define cointcoins(
	target::integer,
	operands::array
) => {
 
	local(
		targetlength	= #target + 1,
		operandlength	= #operands -> size,
		output			= staticarray_join(#targetlength,0),
		outerloopcount
	)
 
	#output -> get(1) = 1
 
	loop(#operandlength) => {
		#outerloopcount = loop_count
		loop(#targetlength) => {
 
			if(loop_count >= #operands -> get(#outerloopcount) and loop_count - #operands -> get(#outerloopcount) > 0) => {
				#output -> get(loop_count) += #output -> get(loop_count - #operands -> get(#outerloopcount))
			}
		}
	}
 
	return #output -> get(#targetlength)
}
 
cointcoins(100, array(1,5,10,25,))
'<br />'
cointcoins(100000, array(1, 5, 10, 25, 50, 100))