module Main where import System.Environment (getArgs) main :: IO () main = do input <- readFile . head =<< getArgs putStrLn $ unwords ["Part 1:", show $ part1 input] putStrLn $ unwords ["Part 2:", show $ part2 input] part1 :: String -> Int part1 = length . uncurry (filter . isFresh) . parse where isFresh :: [(Int, Int)] -> Int -> Bool isFresh fresh ing = any (contained ing) fresh contained :: Int -> (Int, Int) -> Bool contained a (x, y) = x <= a && a <= y parse :: String -> ([(Int, Int)], [Int]) parse = (\(ranges, ingredients) -> ((map parseRange ranges), map read (drop 1 ingredients))) . span (/= "") . lines where parseRange :: String -> (Int, Int) parseRange s = case span (/= '-') s of (start, '-' : end) -> (read start, read end) _ -> error $ "parseRange: expected a string on the form \"NUM-NUM\", got \"" <> s <> "\"" part2 :: String -> Int part2 = error "Not implemented" testInput :: String testInput = unlines [ "3-5", "10-14", "16-20", "12-18", "", "1", "5", "8", "11", "17", "32" ]