blob: 63a2df5cfb77a40b5dad918212860e7221ac9f73 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
cat :: Int -> Int -> Int
cat x y = x * 10^(floor (logBase 10 (fromIntegral y)) + 1) + y
combine :: [Int] -> [Int]
combine (x:xs) = foldl f [x] xs
where
f :: [Int] -> Int -> [Int]
f ns n = [(+), (*), cat] <*> 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 = getContents >>= print . result . map parseLine . lines
|