2018-09-30 22:01:58 +00: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 00:01:53 +00: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 22:01:58 +00: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 13:37:37 +00:00
tests:
- text: < code > numberLetterCounts(5)</ code > should return 19.
2018-10-20 18:02:47 +00:00
testString: assert.strictEqual(numberLetterCounts(5), 19, '< code > numberLetterCounts(5)< / code > should return 19.');
2018-10-04 13:37:37 +00:00
- text: < code > numberLetterCounts(150)</ code > should return 1903.
2018-10-20 18:02:47 +00:00
testString: assert.strictEqual(numberLetterCounts(150), 1903, '< code > numberLetterCounts(150)< / code > should return 1903.');
2018-10-04 13:37:37 +00:00
- text: < code > numberLetterCounts(1000)</ code > should return 21124.
2018-10-20 18:02:47 +00:00
testString: assert.strictEqual(numberLetterCounts(1000), 21124, '< code > numberLetterCounts(1000)< / code > should return 21124.');
2018-09-30 22:01:58 +00: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 18:02:47 +00:00
0: '',
2018-09-30 22:01:58 +00: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 18:02:47 +00:00
let numString = '';
2018-09-30 22:01:58 +00: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 18:02:47 +00:00
let tempStr = '';
2018-09-30 22:01:58 +00: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 >