The nth term of the sequence of triangle numbers is given by, tn = ½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 (right click and 'Save Link/Target As...'), a 16K text file containing nearly two-thousand common English words, how many are triangle words?
Naive solution
from urllib.request import urlopen
from math import sqrt
with urlopen("https://projecteuler.net/project/resources/p042_words.txt") as f:
text = f.read().decode('utf-8')
words = list(map(lambda w: w.strip('"'), text.split(',')))
words[:10]
max_word_length = max(map(len, words))
max_word_length
n_max = int(sqrt(2 * 26 * max_word_length))
n_max
t_n = list(map(lambda n: n*(n+1)//2, range(1, n_max+1)))
def is_triangle_word(word):
word_sum = sum(map(lambda c: ord(c) - ord('A') + 1, word.upper()))
return word_sum in t_n
def solve():
return sum(map(is_triangle_word, words))
solve()