#!/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 projecteuler import timing def is_triang(n: int) -> bool: i = 1 j = 1 while j <= n: if n == j: return True i = i + 1 j = j + i return False @timing def p042() -> None: 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 print('Project Euler, Problem 42') print(f'Answer: {count}') if __name__ == '__main__': p042()