
20 Apr
2014
20 Apr
'14
9:09 a.m.
On 20 April 2014 14:57, S. H. Aegis
Is there any other ways to use variables outside of the "do-block"?
You can pass the list of names as an argument where it is needed.
import Data.List import Data.List.Split import Data.Char import Data.Maybe
main :: IO () main = do names <- readFile "names.txt" print $ sum $ map (\x -> getPosition names x * getScore x) names
getPosition :: [String] -> String -> Int getPosition names x = fromMaybe 0 (elemIndex x $ sortedNamesList names) + 1
getScore :: String -> Int getScore xs = sum $ map (\x -> ord x - 64) xs
sortedNamesList :: [String] -> [String] sortedNamesList names = sort $ nameList names
nameList :: String -> [String] nameList = split (dropDelims . dropBlanks $ oneOf ",\"")