diff --git a/src/Python/Problem042.py b/src/Python/Problem042.py new file mode 100644 index 0000000..4019767 --- /dev/null +++ b/src/Python/Problem042.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +""" +Created on 26 Jul 2021 + +@author: David Doblas Jiménez +@email: daviddoji@pm.me + +Solution for problem 42 of Project Euler +https://projecteuler.net/problem=42 +""" + +from utils import timeit + + +@timeit("Problem 42") +def compute(): + """ + 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, a 16K text file containing nearly two-thousand common English words, + how many are triangle words? + """ + + def triangle_number(num): + return int(0.5*num*(num+1)) + + def word_to_value(word): + return sum(ord(letter)-64 for letter in word) + + triangular_numbers = [triangle_number(n) for n in range(27)] + ans = 0 + with open("files/Problem42.txt", "r") as f: + words = f.readline().strip('"').split('","') + for word in words: + if word_to_value(word) in triangular_numbers: + ans += 1 + + return ans + +if __name__ == "__main__": + + print(f"Result for Problem 42: {compute()}") \ No newline at end of file