aboutsummaryrefslogtreecommitdiff
path: root/2020/02b.hs
diff options
context:
space:
mode:
Diffstat (limited to '2020/02b.hs')
-rw-r--r--2020/02b.hs31
1 files changed, 31 insertions, 0 deletions
diff --git a/2020/02b.hs b/2020/02b.hs
new file mode 100644
index 0000000..5754fe0
--- /dev/null
+++ b/2020/02b.hs
@@ -0,0 +1,31 @@
+module Day2 where
+
+import Data.List.NonEmpty (xor, fromList)
+import Data.List.Split (splitOn)
+import Text.Read (readMaybe)
+import System.Environment (getArgs)
+
+valid :: (Int, Int) -> Char -> String -> Bool
+valid (lo, hi) c s = xor $ fromList [s!!lo == c, s!!hi == c]
+
+parseHeader :: String -> (Int, Int, Char)
+parseHeader s = (lo, hi, c)
+ where [range, (c:_)] = splitOn " " s
+ [lo, hi] = map (\x -> x - 1) $ map read $ splitOn "-" range
+
+lineValid :: String -> Bool
+lineValid s = valid (lo, hi) c pass
+ where [header, pass] = splitOn ": " s
+ (lo, hi, c) = parseHeader header
+
+-- Usage: runghc --ghc-arg="-package split" 2b.hs inputs/day2
+main :: IO ()
+main = do
+ args <- getArgs;
+ content <- readFile $ head args;
+ let l = lines content;
+ let nums = filter lineValid l
+
+ putStrLn $ show $ length nums;
+
+ return ();