-- The nth term of the sequence of triangle numbers is given by, t[n] = ½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 = t[10]. 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? import Euler import System.IO uncomma :: String -> [String] uncomma = filter ((/= ',') . head) . groupBy (\a b -> (a == ',') == (b == ',')) wordValue :: [Char] -> Int wordValue = sum . map (\c -> 1 + (fromEnum c - fromEnum 'A')) isTriangle n = let m = floor (sqrt $ fromIntegral $ 2 * n) in m * (m + 1) == 2 * n main = do words <- sort . uncomma . filter (not . (`elem` "\"\r\n")) <$> readFile "p042_words.txt" print $ length $ filter isTriangle $ map wordValue words