Solution to Problem 42. Written in Python.
Problem: The nth term of the sequence of triangle numbers is given by, tn = n(n+1)/2; 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?
import csv
import os
file_path = os.path.join(os.path.dirname(__file__), '..', 'euler_lib/p042_words.txt')
get_num = lambda word: sum(["-ABCDEFGHIJKLMNOPQRSTUVWXYZ".index(char) for char in word])
tri = lambda n: n * (n + 1) / 2
tri_list = [tri(n) for n in range(1, 100)]
with open(file_path, 'r') as text_file:
rows = csv.reader(text_file, delimiter=',', quotechar='"')
words = [word for row in rows for word in row]
print len([word for word in words if get_num(word) in tri_list])