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?
open System.IO // read the content of the file into an array of words let words = File.ReadAllLines (@"C:\TEMP\words.txt") |> Array.map (fun s -> s.Replace("\"", "")) |> Array.collect (fun s -> s.ToUpper().Trim().Split(',')) // function to calculate the word value of a word let wordValue word = word.ToString().ToCharArray() |> Array.map (fun c -> int(c) - int('A') + 1) |> Array.sum // convert all words to their corresponding word values let wordValues = words |> Array.map wordValue let maxWordValue = wordValues |> Array.max // the sequence of triangle numbers let naturalNumbers = Seq.unfold (fun state -> Some(state, state + 1)) 1 let T n = n * (n + 1) / 2 let TSeq = naturalNumbers |> Seq.map T let answer = TSeq |> Seq.takeWhile (fun t -> t <= maxWordValue) |> Seq.map (fun t -> wordValues |> Array.filter (fun n -> n = t) |> Array.length) |> Seq.sum
To get started on this problem, I first read all the words in the downloaded text file into an array of strings, each being one of the two thousand words. Then I build a function to calculate the word value of a word and converted the word array into an array of word values. The max word value is useful here because it allows me to cap how many elements in the T sequence I should check.
I’m an AWS Serverless Hero and the author of Production-Ready Serverless. I have run production workload at scale in AWS for nearly 10 years and I have been an architect or principal engineer with a variety of industries ranging from banking, e-commerce, sports streaming to mobile gaming. I currently work as an independent consultant focused on AWS and serverless.
Here is a complete list of all my posts on serverless and AWS Lambda. In the meantime, here are a few of my most popular blog posts.
- Lambda optimization tip – enable HTTP keep-alive
- You are thinking about serverless costs all wrong
- Many faced threats to Serverless security
- We can do better than percentile latencies
- I’m afraid you’re thinking about AWS Lambda cold starts all wrong
- Yubl’s road to Serverless
- AWS Lambda – should you have few monolithic functions or many single-purposed functions?
- AWS Lambda – compare coldstart time with different languages, memory and code sizes
- Guys, we’re doing pagination wrong