| 
									
										
										
										
											2018-09-30 23:01:58 +01:00
										 |  |  | --- | 
					
						
							|  |  |  | title: Count the coins | 
					
						
							|  |  |  | id: 59713bd26bdeb8a594fb9413 | 
					
						
							|  |  |  | challengeType: 5 | 
					
						
							| 
									
										
										
										
											2019-08-05 09:17:33 -07:00
										 |  |  | forumTopicId: 302238 | 
					
						
							| 
									
										
										
										
											2018-09-30 23:01:58 +01:00
										 |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Description
 | 
					
						
							|  |  |  | <section id='description'> | 
					
						
							| 
									
										
										
										
											2019-05-22 23:30:29 +09:00
										 |  |  | There are four types of common coins in <a href="https://en.wikipedia.org/wiki/United_States" target="_blank">US</a> currency: | 
					
						
							| 
									
										
										
										
											2019-02-25 13:36:09 +09:00
										 |  |  | <ul> | 
					
						
							|  |  |  |   <li>quarters (25 cents)</li> | 
					
						
							|  |  |  |   <li>dimes (10 cents)</li> | 
					
						
							|  |  |  |   <li>nickels (5 cents), and</li> | 
					
						
							|  |  |  |   <li>pennies (1 cent)</li> | 
					
						
							|  |  |  | </ul> | 
					
						
							| 
									
										
										
										
											2018-09-30 23:01:58 +01:00
										 |  |  | <p>There are six ways to make change for 15 cents:</p> | 
					
						
							| 
									
										
										
										
											2019-02-25 13:36:09 +09:00
										 |  |  | <ul> | 
					
						
							|  |  |  |   <li>A dime and a nickel</li> | 
					
						
							|  |  |  |   <li>A dime and 5 pennies</li> | 
					
						
							|  |  |  |   <li>3 nickels</li> | 
					
						
							|  |  |  |   <li>2 nickels and 5 pennies</li> | 
					
						
							|  |  |  |   <li>A nickel and 10 pennies</li> | 
					
						
							|  |  |  |   <li>15 pennies</li> | 
					
						
							|  |  |  | </ul> | 
					
						
							| 
									
										
										
										
											2018-09-30 23:01:58 +01:00
										 |  |  | </section> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Instructions
 | 
					
						
							|  |  |  | <section id='instructions'> | 
					
						
							| 
									
										
										
										
											2019-03-01 17:10:50 +09:00
										 |  |  | Implement a function to determine how many ways there are to make change for a dollar using these common coins (1 dollar = 100 cents) | 
					
						
							| 
									
										
										
										
											2018-09-30 23:01:58 +01:00
										 |  |  | </section> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Tests
 | 
					
						
							|  |  |  | <section id='tests'> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yml | 
					
						
							| 
									
										
										
										
											2018-10-04 14:37:37 +01:00
										 |  |  | tests: | 
					
						
							|  |  |  |   - text: <code>countCoins</code> is a function. | 
					
						
							| 
									
										
										
										
											2019-07-26 05:24:52 -07:00
										 |  |  |     testString: assert(typeof countCoins === 'function'); | 
					
						
							| 
									
										
										
										
											2018-10-04 14:37:37 +01:00
										 |  |  |   - text: <code>countCoints()</code> should return 242. | 
					
						
							| 
									
										
										
										
											2019-07-26 05:24:52 -07:00
										 |  |  |     testString: assert.equal(countCoins(), 242); | 
					
						
							| 
									
										
										
										
											2018-09-30 23:01:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </section> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Challenge Seed
 | 
					
						
							|  |  |  | <section id='challengeSeed'> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <div id='js-seed'> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							| 
									
										
										
										
											2019-02-26 17:07:07 +09:00
										 |  |  | function countCoins() { | 
					
						
							| 
									
										
										
										
											2018-09-30 23:01:58 +01:00
										 |  |  |   // Good luck! | 
					
						
							|  |  |  |   return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </section> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Solution
 | 
					
						
							|  |  |  | <section id='solution'> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							| 
									
										
										
										
											2019-02-26 17:07:07 +09:00
										 |  |  | function countCoins() { | 
					
						
							| 
									
										
										
										
											2018-09-30 23:01:58 +01:00
										 |  |  |   let t = 100; | 
					
						
							|  |  |  |   const operands = [1, 5, 10, 25]; | 
					
						
							|  |  |  |   const targetsLength = t + 1; | 
					
						
							|  |  |  |   const operandsLength = operands.length; | 
					
						
							|  |  |  |   t = [1]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   for (let a = 0; a < operandsLength; a++) { | 
					
						
							|  |  |  |     for (let b = 1; b < targetsLength; b++) { | 
					
						
							|  |  |  |       // initialise undefined target | 
					
						
							|  |  |  |       t[b] = t[b] ? t[b] : 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // accumulate target + operand ways | 
					
						
							|  |  |  |       t[b] += (b < operands[a]) ? 0 : t[b - operands[a]]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return t[targetsLength - 1]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </section> |