-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
/
Copy pathProblem022.js
36 lines (30 loc) · 1.16 KB
/
Problem022.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import * as fs from 'fs'
/**
* Problem 22 - Names scores
* @see {@link https://projecteuler.net/problem=22}
*
* Using names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over
* five-thousand first names, begin by sorting it into alphabetical order. Then working out the
* alphabetical value for each name, multiply this value by its alphabetical position in the list to
* obtain a name score.
*
* For example, when the list is sorted into alphabetical order, COLIN,
* which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list.
* So, COLIN would obtain a score of 938 × 53 = 49714.
*
* What is the total of all the name scores in the file?
*/
export function namesScores (txtPath) {
const names = fs.readFileSync(txtPath, 'utf8').replaceAll('"', '').split(',')
// Sort ascending the list of names
names.sort((a, b) => (a > b))
let totalSum = 0
for (let i = 0; i < names.length; i++) {
let nameSum = 0
for (let j = names[i].length; j--;) {
nameSum += names[i].charCodeAt(j) - ('a'.charCodeAt(0) - 1)
}
totalSum += nameSum * (i + 1)
}
return totalSum
}