|
|
@@ -13,15 +13,22 @@ main = do |
|
|
|
(Just x) -> putStrLn $ "day1b: " ++ (show x) |
|
|
|
|
|
|
|
solveA :: [Integer] -> Maybe Integer |
|
|
|
solveA [] = Nothing |
|
|
|
solveA xs = Just $ (\(x,y) -> x * y) lsa |
|
|
|
where |
|
|
|
lsa = if lsa' == [] then error "no answer" else head lsa' |
|
|
|
lsa' = [ (x,y) | x <- xs, y <- xs, x + y == 2020 ] |
|
|
|
solveA = solveX (\(x,y) -> x * y) |
|
|
|
(\xs -> [ (x,y) | x <- xs |
|
|
|
, y <- xs |
|
|
|
, x + y == 2020 ]) |
|
|
|
|
|
|
|
solveB :: [Integer] -> Maybe Integer |
|
|
|
solveB [] = Nothing |
|
|
|
solveB xs = Just $ (\(x,y,z) -> x * y * z) lsb |
|
|
|
solveB = solveX (\(x,y,z) -> x * y * z) |
|
|
|
(\xs -> [ (x,y,z) | x <- xs |
|
|
|
, y <- xs |
|
|
|
, z <- xs |
|
|
|
, x + y + z == 2020 ]) |
|
|
|
|
|
|
|
solveX :: Eq a => (a -> Integer) -> ([Integer] -> [a]) -> [Integer] -> Maybe Integer |
|
|
|
solveX _ _ [] = Nothing |
|
|
|
solveX f g l = if ls == [] |
|
|
|
then Nothing |
|
|
|
else Just $ (f . head) ls |
|
|
|
where |
|
|
|
lsb = if lsb' == [] then error "no answer" else head lsb' |
|
|
|
lsb' = [ (x,y,z) | x <- xs, y <- xs, z <- xs, x + y + z == 2020 ] |
|
|
|
ls = g l |