diff options
-rw-r--r-- | 7-1.hs | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -0,0 +1,22 @@ +combine :: [Int] -> [Int] +combine (x:xs) = foldl f [x] xs + where + f :: [Int] -> Int -> [Int] + f ns n = [(+), (*)] <*> ns <*> [n] + +check :: Int -> [Int] -> Bool +check x xs = elem x (combine xs) + +parseLine :: String -> (Int,[Int]) +parseLine s = (read $ init x, map read xs) + where + (x:xs) = words s + +result :: [(Int,[Int])] -> Int +result xs = sum . map fst . filter snd + $ zip (map fst xs) (map (uncurry check) xs) + +main :: IO () +main = do + ls <- lines <$> getContents + print . result . map parseLine $ ls |