Done day 5
[advent-of-code-20.git] / advent05 / src / advent05.hs
diff --git a/advent05/src/advent05.hs b/advent05/src/advent05.hs
new file mode 100644 (file)
index 0000000..06d0ecc
--- /dev/null
@@ -0,0 +1,26 @@
+-- import Debug.Trace
+
+import Numeric
+import qualified Data.Set as S
+
+main :: IO ()
+main = 
+  do  text <- readFile "data/advent05.txt"
+      let passes = lines text
+      print $ part1 passes
+      print $ part2 passes
+
+part1 = maximum . map convert
+
+part2 passes = S.elemAt 0 $ expecteds `S.difference` knowns
+  where ns = map convert passes
+        highest = maximum ns
+        lowest  = minimum ns
+        knowns = S.fromList ns
+        expecteds = S.fromList [lowest..highest]
+
+directionToInt :: Char -> Int
+directionToInt dir = if dir `elem` "BR" then 1 else 0
+
+convert :: String -> Int
+convert = fst . head . readInt 2 (`elem` "FBLR") directionToInt