/* Euler #42 in Picat. """ The nth term of the sequence of triangle numbers is given by, tn = 1/2*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? """ This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import util. main => go. go => time(euler42). euler42 => Words = [[W : W in Word, W != '"'] : Word in split(read_file_chars("words.txt"), ",")], T20 = [triangle_number(I) : I in 1..20], Len = [WW : WW in Words, membchk(get_score(WW),T20)].length, println(Len). triangle_number(N) = (N*(N+1)) div 2. get_score(Name) = Total => Total = 0, foreach(I in 1..Name.length) Total := Total+(ord(Name[I])-64) end.