部分和
与えられた値 a と数字列に対し、
数字列の部分和が a に等しくなることがあるかどうかを判定するという問題。
昔解いたときはタプルとか使ってややこしく解いた気がするけど、割合スマートに解けた気がするので
main = do an <- getLine cs <- getContents print.sumf (a an) 0 .datalist (n an) $ cs where n = read.head.tail.words a = read.head.words datalist :: Int -> String -> [Int] datalist n = map read.take n.words sumf :: Int -> Int -> [Int] -> Bool sumf a k [] = a == k sumf a k (x:xs) = sumf a k xs || sumf a (k+x) xs