62 lines
1.6 KiB
Python
62 lines
1.6 KiB
Python
#!/usr/bin/python3
|
|
|
|
# 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?
|
|
|
|
from timeit import default_timer
|
|
|
|
def is_triang(n):
|
|
i = 1
|
|
j = 1
|
|
|
|
while j <= n:
|
|
if n == j:
|
|
return True
|
|
i = i + 1
|
|
j = j + i
|
|
|
|
return False
|
|
|
|
def main():
|
|
start = default_timer()
|
|
|
|
try:
|
|
fp = open('words.txt', 'r')
|
|
except:
|
|
print('Error while opening file {}'.format('words.txt'))
|
|
exit(1)
|
|
|
|
words = list(fp.readline().replace('"', '').split(','))
|
|
|
|
fp.close()
|
|
|
|
count = 0
|
|
|
|
# For each word, calculate its value and check if it's a triangle number.
|
|
for word in words:
|
|
value = 0
|
|
l = len(word)
|
|
|
|
for j in range(l):
|
|
value = value + ord(word[j]) - ord('A') + 1
|
|
|
|
if is_triang(value):
|
|
count = count + 1
|
|
|
|
end = default_timer()
|
|
|
|
print('Project Euler, Problem 42')
|
|
print('Answer: {}'.format(count))
|
|
|
|
print('Elapsed time: {:.9f} seconds'.format(end - start))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|