6. Problem 42 - Project Euler
Haskell
import System
import Data.List
import Data.Char
-- triangle numbers = 1, 3, 6, 10, 15, ...
tns = scanl (a i -> a + i) 1 [2..]
-- "SKY" => 19 + 11 + 25 => 55
conv x = sum [(ord c) - ord '@' | c <- x]
-- "A", "ABILITY", "ABLE", ... => ["A","ABILITY","ABLE",...
enlist s = (read::String -> [String]) ('[':s ++ "]")
-- [1, 78, 20, 59, 45, ... => [1, 78, 45, ...
test c = intersect mcec (takeWhile (<= mmcec) tns)
where
-- ["A", "ABILITY", "ABLE", ... => [1, 78, 20, ...
mcec = map conv (enlist c)
-- [1, 78, 20, ... 192, ...] => 192
mmcec = maximum mcec
main = do
args <- getArgs
contents <- readFile $ head args
return $ length $ test contents
--
7. - Wikipedia
Amazon.co.jp:
Haskell - Wikipedia
Amazon.co.jp: Haskell
Simon Peyton Jones - Wikipedia, the free encyclopedia
Haskell 7.0.1
Project Euler
Problem 42 - Project Euler ( 42 )
Problem 42 - PukiWiki ( )