feat: solve part 1 day 5
This commit is contained in:
parent
8e780753c1
commit
19e994ef71
2 changed files with 1238 additions and 0 deletions
45
app/Day5.hs
Normal file
45
app/Day5.hs
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
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"
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue