Done day 5
[advent-of-code-20.git] / advent05 / src / advent05.hs
1 -- import Debug.Trace
2
3 import Numeric
4 import qualified Data.Set as S
5
6 main :: IO ()
7 main =
8 do text <- readFile "data/advent05.txt"
9 let passes = lines text
10 print $ part1 passes
11 print $ part2 passes
12
13 part1 = maximum . map convert
14
15 part2 passes = S.elemAt 0 $ expecteds `S.difference` knowns
16 where ns = map convert passes
17 highest = maximum ns
18 lowest = minimum ns
19 knowns = S.fromList ns
20 expecteds = S.fromList [lowest..highest]
21
22 directionToInt :: Char -> Int
23 directionToInt dir = if dir `elem` "BR" then 1 else 0
24
25 convert :: String -> Int
26 convert = fst . head . readInt 2 (`elem` "FBLR") directionToInt