From 42dcc56b1389a732f44c0d5824fd2b5482a879f0 Mon Sep 17 00:00:00 2001 From: Amneesh Singh Date: Fri, 9 Dec 2022 17:26:38 +0530 Subject: [PATCH] day 3: rewrite use Data.Text Signed-off-by: Amneesh Singh --- day3.hs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/day3.hs b/day3.hs index b0217fa..49072e9 100644 --- a/day3.hs +++ b/day3.hs @@ -1,24 +1,28 @@ import Data.Char (isAsciiLower, isAsciiUpper) import Data.List (intersect) +import Data.Text (Text) +import qualified Data.Text as T (foldl, lines, splitAt) +import Lib (readFile') main :: IO () main = do - input <- lines <$> readFile "day3.in" + input <- map parse . T.lines <$> readFile' "day3.in" putStr "Q1: " print $ q1 input putStr "Q2: " print $ q2 input -q1 :: [String] -> Int -q1 = - sum - . map (\x -> val . head . uncurry intersect $ splitAt (div (length x) 2) x) +q1 :: [[Int]] -> Int +q1 = sum . map (\x -> head . uncurry intersect $ splitAt (div (length x) 2) x) -q2 :: [String] -> Int +q2 :: [[Int]] -> Int q2 [] = 0 q2 input = let (cur, rest) = splitAt 3 input - in (val . head . foldr1 intersect) cur + q2 rest + in (head . foldr1 intersect) cur + q2 rest + +parse :: Text -> [Int] +parse = T.foldl (\xs x -> val x : xs) [] val :: Char -> Int val c