# 29 Mar 2017 Coded triangle numbers

## Project Euler

### Coded triangle numbers

#### Problem 42 Solved in Python using Generators.

The nth term of the sequence of triangle numbers is given by, tn = 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 (right click and ‘Save Link/Target As…’), a 16K text file containing nearly two-thousand common English words, how many are triangle words?

 ```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``` ```from functools import wraps from os.path import dirname, join def string_to_num(string): from string import ascii_lowercase as alpha return sum([alpha.index(x)+ 1 for x in string]) def load_words(): with open(join(dirname(__file__), "p042_words.txt")) as f: words = f.read().strip("\n").split(",") return [x.lower().strip("\"") for x in words] def triangles(): n = 1 while True: t = (n * (n + 1)) // 2 n = n + 1 yield t list = [] def getTriangle(gen, n): for i in xrange(1, n): list.append(gen.next()) return list def isTriangle(num): allTriangles = getTriangle(triangles(), 201) if num in allTriangles: return True else: return False def solution(): return sum(1 for x in load_words() if isTriangle(string_to_num(x))) if __name__ == '__main__': print(solution()) ```