Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a58af2b

Browse files
Add project euler problem 17
1 parent 5f601fa commit a58af2b

File tree

3 files changed

+91
-0
lines changed

3 files changed

+91
-0
lines changed

‎DIRECTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@
197197
* [Problem014](https://github.com/TheAlgorithms/Javascript/blob/master/Project-Euler/Problem014.js)
198198
* [Problem015](https://github.com/TheAlgorithms/Javascript/blob/master/Project-Euler/Problem015.js)
199199
* [Problem016](https://github.com/TheAlgorithms/Javascript/blob/master/Project-Euler/Problem016.js)
200+
* [Problem017](https://github.com/TheAlgorithms/Javascript/blob/master/Project-Euler/Problem017.js)
200201
* [Problem020](https://github.com/TheAlgorithms/Javascript/blob/master/Project-Euler/Problem020.js)
201202
* [Problem1](https://github.com/TheAlgorithms/Javascript/blob/master/Project-Euler/Problem1.js)
202203
* [Problem10](https://github.com/TheAlgorithms/Javascript/blob/master/Project-Euler/Problem10.js)

‎Project-Euler/Problem017.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
https://projecteuler.net/problem=17
3+
4+
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.
5+
If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
6+
7+
NOTE: 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.
8+
*/
9+
10+
const numberToCharMap = {
11+
0: '',
12+
1: 'one',
13+
2: 'two',
14+
3: 'three',
15+
4: 'four',
16+
5: 'five',
17+
6: 'six',
18+
7: 'seven',
19+
8: 'eight',
20+
9: 'nine',
21+
10: 'ten',
22+
11: 'eleven',
23+
12: 'twelve',
24+
13: 'thirteen',
25+
14: 'fourteen',
26+
15: 'fifteen',
27+
16: 'sixteen',
28+
17: 'seventeen',
29+
18: 'eighteen',
30+
19: 'nineteen',
31+
20: 'twenty',
32+
30: 'thirty',
33+
40: 'forty',
34+
50: 'fifty',
35+
60: 'sixty',
36+
70: 'seventy',
37+
80: 'eighty',
38+
90: 'ninety',
39+
100: 'hundred',
40+
1000: 'onethousand'
41+
}
42+
43+
const getOnes = (n) => Math.floor(n % 10)
44+
const getTens = (n) => Math.floor((n / 10) % 10)
45+
const getHundreds = (n) => Math.floor((n / 100) % 10)
46+
47+
const countNumberLetter = (n) => {
48+
let numberLetter = ''
49+
50+
for (let i = 1; i <= n; i++) {
51+
const ones = getOnes(i)
52+
const tens = getTens(i)
53+
const hundreds = getHundreds(i)
54+
55+
if (i <= 20 || (i < 100 && ones === 0) || i === 1000)
56+
numberLetter += numberToCharMap[i]
57+
else if (i < 100)
58+
numberLetter += numberToCharMap[tens * 10] + numberToCharMap[ones]
59+
else if (i < 1000) {
60+
if (ones !== 0 || tens !== 0) numberLetter += 'and'
61+
const tensPlusOnes = tens * 10 + ones
62+
numberLetter +=
63+
tensPlusOnes < 20
64+
? numberToCharMap[hundreds] +
65+
numberToCharMap[100] +
66+
numberToCharMap[tensPlusOnes]
67+
: numberToCharMap[hundreds] +
68+
numberToCharMap[100] +
69+
numberToCharMap[tens * 10] +
70+
numberToCharMap[ones]
71+
}
72+
}
73+
74+
return numberLetter.length
75+
}
76+
77+
export { countNumberLetter }

‎Project-Euler/test/Problem017.test.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { countNumberLetter } from '../Problem017'
2+
3+
describe('checkCountNumberLetter', () => {
4+
it('Solves the problem statement example', () => {
5+
const numberLetter = countNumberLetter(1000)
6+
expect(numberLetter).toBe(21124)
7+
})
8+
9+
it('Returns first five numbers count', () => {
10+
const numberLetter = countNumberLetter(5)
11+
expect(numberLetter).toBe(19)
12+
})
13+
})

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /