-
Notifications
You must be signed in to change notification settings - Fork 0
/
042.js
66 lines (57 loc) · 1.85 KB
/
042.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// The nth term of the sequence of triangle numbers is given by,
// t(n) = 1/2 * n(n+1);
// so the first ten triangle numbers are:
// 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
// By converting each letter in a word to a number corresponding to its
// alphabetical position and adding these values we form a word value. For
// example, the word value for SKY is 19 + 11 + 25 = 55 = t10. If the word value
// is a triangle number then we shall call the word a triangle word.
// Using [words.txt], a 16K text file containing nearly two-thousand common
// English words, how many are triangle words?
var isTriangleNumber = (function(){
var memo = [false];
return function(number) {
var result = memo[number];
if (typeof result === 'undefined') {
var length = memo.length;
if (number < length) {
result = false;
memo[number] = result;
} else {
var n = 1;
while ((n*(n+1))/2 < number) {
memo[(n*(n+1))/2] = true;
n++;
}
result = number === (n*(n+1))/2;
memo[number] = result;
}
}
return result;
};
})();
function wordValue(word) {
var alphabet = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var value = 0, length = word.length;
while (length--) {
value += alphabet.indexOf(word[length]);
}
return value;
}
function countTriangleWords(words) {
var len = words.length;
var count = 0;
while (len--) {
if (isTriangleNumber(wordValue(words[len]))) {
count++;
}
}
return count;
}
var fs = require('fs');//Node
fs.readFile('words.txt', {
encoding: 'UTF-8'
}, function(err, data){
var words = data.replace(/"/g, '').split(',');
console.log( countTriangleWords(words) );
});