Back to Project Euler

Previous Problem Next Problem

Problem 17: Number Letter Counts

If the numbers \(1\) to \(5\) are written out in words: one, two, three, four, five, then there are \(3 + 3 + 5 + 4 + 4 = 19\) letters used in total.

If all the numbers from \(1\) to \(1000\) (one thousand) inclusive were written out in words, how many letters would be used?


NOTE: Do not count spaces or hyphens. For example, \(342\) (three hundred and forty-two) contains \(23\) letters and \(115\) (one hundred and fifteen) contains \(20\) letters. The use of "and" when writing out numbers is in compliance with British usage.

Solution

We need to note how many times each word appears. I use the term "century" to denote the ranges 1-99, 100-199, 200-299, and so on up to 900-999.

Python Code

def p17():
	res = 0
	# trailing and leading single digits
	place1 = ['one', 'two', 'three', 'four', 'five', 'six', \
		'seven', 'eight', 'nine']
	res += sum(map(len, place1)) * 190
	# teen words
	place11 = ['ten', 'eleven', 'twelve', 'thirteen', \
		'fourteen', 'fifteen', 'sixteen', \
		'seventeen', 'eighteen', 'nineteen']
	res += sum(map(len, place11)) * 10
	# tens place words
	place10 = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', \
		'seventy', 'eighty', 'ninety']
	res += sum(map(len, place10)) * 100
	# "and"
	res += len('and') * 891
	# hundred"
	res += len('hundred') * 900
	# and finally:
	res += len('one') + len('thousand')
	return res

Previous Problem Next Problem

Back to Project Euler