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 (right click and 'Save Link/Target As...'), a 16K text file containing nearly two-thousand common English words, how many are triangle words?
%integer_sqrt %triangle p42()-> File=binary_to_list(element(2,file:read_file("words.txt"))), Data=lists:map(fun(W)-> string:strip(W,both,$") end, string:tokens(File,",")), Vals=lists:map(fun(W)-> lists:sum(lists:map(fun(L)->L-64 end,W)) end, Data), Ans=length(lists:filter(fun(N)->triangle((-1+integer_sqrt(1+8*N)) div 2)==N end,Vals)), io:format("~w~n",[Ans]).
#triangles def p42 letters=" ABCDEFGHIJKLMNOPQRSTUVWXYZ" lets={} (1..26).each{|i|lets[letters[i..i]]=i} words=File.read("words.txt").scan(/\"\w+\"/).map{|s|s[1...-1]} triangles=(1..100).map{|i|triangles i}.to_set puts words.select{|w|triangles.include?(w.split("").map{|l|lets[l]}.sum)}.length end