Back to Project Euler

Previous Problem Next Problem

Problem 42: Coded Triangle Numbers

The \(n\)th term of the sequence of triangle numbers is given by, \(t_n = \frac12n(n+1)\); so the first ten triangle numbers are: \[1, 3, 6, 10, 15, 21, 28, 36, 45, 55, \dots\]

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 = t_{10}\). 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?

Solution

If \(t = \frac 12 n(n+1)\), then \(n = \frac 12 (-1 + \sqrt{8t+1})\). A positive integer \(t\) is thus triangular if and only if \(\sqrt{8t+1}\) is an integer. I parse the list of names in the same way as in problem 22.

Python Code

import urllib.request
from math import isqrt
def p42():
	url = "https://projecteuler.net/resources/documents/0042_words.txt"
	f = urllib.request.urlopen(url)
	line = f.read().decode('utf-8')
	f.close()
	L = list(line[1:-1].split('","'))
	res = 0
	for name in L:
		t = sum(map(lambda c: ord(c) - ord('A') + 1, name))
		if isqrt(8 * t + 1) ** 2 == 8 * t + 1:
			res += 1
	return res

Previous Problem Next Problem

Back to Project Euler