Files

131 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 5900f37d1000cf542c50fe90
title: 'Завдання 17: Підрахунок букв у числівниках'
challengeType: 5
forumTopicId: 301804
dashedName: problem-17-number-letter-counts
---
# --description--
Якщо числа від 1 до 5 записати словами (one, two, three, four, five), то загалом буде використано 3 + 3 + 5 + 4 + 4 = 10 букв.
Якщо числа від 1 до заданого `limit` включно записати словами, скільки букв потрібно було б використати?
**Note:** Не враховуйте пробіли чи дефіси. Наприклад, 342 (three hundred and forty-two) складається з 23 літер, а 115 (one hundred and fifteen) - з 20. Використання "and" при написанні чисел відповідає правилам Британської англійської.
# --hints--
`numberLetterCounts(5)` має повернути число.
```js
assert(typeof numberLetterCounts(5) === 'number');
```
`numberLetterCounts(5)` має повернути число 19.
```js
assert.strictEqual(numberLetterCounts(5), 19);
```
`numberLetterCounts(150)` має повернути число 1903.
```js
assert.strictEqual(numberLetterCounts(150), 1903);
```
`numberLetterCounts(1000)` має повернути число 21124.
```js
assert.strictEqual(numberLetterCounts(1000), 21124);
```
# --seed--
## --seed-contents--
```js
function numberLetterCounts(limit) {
return true;
}
numberLetterCounts(5);
```
# --solutions--
```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];
}
}
return tempStr;
}
}
for (let i = 1; i <= limit; i++) {
numString += convertToString(i);
}
return numString.length;
}
```