Browse Source

feat: solve part 1 day 5

master
Jacob Jonsson 9 hours ago
parent
commit
19e994ef71
  1. 45
      app/Day5.hs
  2. 1193
      input/day5.txt

45
app/Day5.hs

@ -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"
]

1193
input/day5.txt

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save