* fix(curriculum): tests quotes * fix(curriculum): fill seed-teardown * fix(curriculum): fix tests and remove unneeded seed-teardown
		
			
				
	
	
		
			135 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| id: 5900f37d1000cf542c50fe90
 | |
| challengeType: 5
 | |
| title: 'Problem 17: Number letter counts'
 | |
| ---
 | |
| 
 | |
| ## Description
 | |
| <section id='description'>
 | |
| If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.
 | |
| If all the numbers from 1 to given <code>limit</code> inclusive were written out in words, how many letters would be used?
 | |
| <b>NOTE:</b> Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.
 | |
| </section>
 | |
| 
 | |
| ## Instructions
 | |
| <section id='instructions'>
 | |
| 
 | |
| </section>
 | |
| 
 | |
| ## Tests
 | |
| <section id='tests'>
 | |
| 
 | |
| ```yml
 | |
| tests:
 | |
|   - text: <code>numberLetterCounts(5)</code> should return 19.
 | |
|     testString: assert.strictEqual(numberLetterCounts(5), 19, '<code>numberLetterCounts(5)</code> should return 19.');
 | |
|   - text: <code>numberLetterCounts(150)</code> should return 1903.
 | |
|     testString: assert.strictEqual(numberLetterCounts(150), 1903, '<code>numberLetterCounts(150)</code> should return 1903.');
 | |
|   - text: <code>numberLetterCounts(1000)</code> should return 21124.
 | |
|     testString: assert.strictEqual(numberLetterCounts(1000), 21124, '<code>numberLetterCounts(1000)</code> should return 21124.');
 | |
| 
 | |
| ```
 | |
| 
 | |
| </section>
 | |
| 
 | |
| ## Challenge Seed
 | |
| <section id='challengeSeed'>
 | |
| 
 | |
| <div id='js-seed'>
 | |
| 
 | |
| ```js
 | |
| function numberLetterCounts(limit) {
 | |
|   // Good luck!
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| numberLetterCounts(5);
 | |
| ```
 | |
| 
 | |
| </div>
 | |
| 
 | |
| 
 | |
| 
 | |
| </section>
 | |
| 
 | |
| ## Solution
 | |
| <section id='solution'>
 | |
| 
 | |
| 
 | |
| ```js
 | |
| function numberLetterCounts(limit) {
 | |
|   const dictionary = {
 | |
|     0: '',
 | |
|     1: 'one',
 | |
|     2: 'two',
 | |
|     3: 'three',
 | |
|     4: 'four',
 | |
|     5: 'five',
 | |
|     6: 'six',
 | |
|     7: 'seven',
 | |
|     8: 'eight',
 | |
|     9: 'nine',
 | |
|     10: 'ten',
 | |
|     11: 'eleven',
 | |
|     12: 'twelve',
 | |
|     13: 'thirteen',
 | |
|     14: 'fourteen',
 | |
|     15: 'fifteen',
 | |
|     16: 'sixteen',
 | |
|     17: 'seventeen',
 | |
|     18: 'eighteen',
 | |
|     19: 'nineteen',
 | |
|     20: 'twenty',
 | |
|     30: 'thirty',
 | |
|     40: 'forty',
 | |
|     50: 'fifty',
 | |
|     60: 'sixty',
 | |
|     70: 'seventy',
 | |
|     80: 'eighty',
 | |
|     90: 'ninety',
 | |
|     1000: 'onethousand'
 | |
|   };
 | |
| 
 | |
|   let numString = '';
 | |
| 
 | |
|   function convertToString(num) {
 | |
|     // check dictionary for number
 | |
|     if (dictionary[num]) {
 | |
|       return dictionary[num];
 | |
|     } else {
 | |
|       const hundreds = Math.floor(num / 100);
 | |
|       const tens =  Math.floor((num / 10) % 10) * 10;
 | |
|       const remainder = num % 10;
 | |
| 
 | |
|       let tempStr = '';
 | |
| 
 | |
|       if (hundreds === 0) {
 | |
|         tempStr += dictionary[tens] + dictionary[remainder];
 | |
|       } else {
 | |
|         tempStr += dictionary[hundreds] + 'hundred';
 | |
| 
 | |
|         if (tens !== 0 || remainder !== 0) {
 | |
|           tempStr += 'and';
 | |
|         }
 | |
| 
 | |
|         if (tens < 20) {
 | |
|           const lessThanTwenty = tens + remainder;
 | |
|           tempStr += dictionary[lessThanTwenty];
 | |
|         } else {
 | |
|           tempStr += dictionary[tens] + dictionary[remainder];
 | |
|         }
 | |
|       }
 | |
|       // console.log(num, hundreds, tens, remainder);
 | |
|       return tempStr;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   for (let i = 1; i <= limit; i++) {
 | |
|     numString += convertToString(i);
 | |
|   }
 | |
|   return numString.length;
 | |
| }
 | |
| ```
 | |
| 
 | |
| </section>
 |