2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								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.
							 
						 
					
						
							
								
									
										
										
										
											2018-10-08 01:01:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								If all the numbers from 1 to given < code > limit< / code >  inclusive were written out in words, how many letters would be used?
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< 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
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								tests:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  text: < code > numberLetterCounts(5)</ code >  should return 19.
							 
						 
					
						
							
								
									
										
										
										
											2018-10-20 21:02:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    testString: assert.strictEqual(numberLetterCounts(5), 19, '< code > numberLetterCounts(5)< / code >  should return 19.');
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  -  text: < code > numberLetterCounts(150)</ code >  should return 1903.
							 
						 
					
						
							
								
									
										
										
										
											2018-10-20 21:02:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    testString: assert.strictEqual(numberLetterCounts(150), 1903, '< code > numberLetterCounts(150)< / code >  should return 1903.');
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  -  text: < code > numberLetterCounts(1000)</ code >  should return 21124.
							 
						 
					
						
							
								
									
										
										
										
											2018-10-20 21:02:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    testString: assert.strictEqual(numberLetterCounts(1000), 21124, '< code > numberLetterCounts(1000)< / code >  should return 21124.');
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / 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 = {
							 
						 
					
						
							
								
									
										
										
										
											2018-10-20 21:02:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    0: '',
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    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'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-20 21:02:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  let numString = '';
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  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;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-20 21:02:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      let tempStr = '';
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      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 >