#!/usr/bin/env 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 p042_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 sys 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: with open('p042_words.txt', 'r', encoding='utf-8') as fp: words = list(fp.readline().replace('"', '').split(',')) except FileNotFoundError: print('Error while opening file p042_words.txt') sys.exit(1) 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(f'Answer: {count}') print(f'Elapsed time: {end - start:.9f} seconds') if __name__ == '__main__': main()