From 4ad59fb820562a88293ec4e5d6493264eedb1c61 Mon Sep 17 00:00:00 2001 From: Amneesh Singh Date: Fri, 9 Dec 2022 17:26:22 +0530 Subject: [PATCH] day 1: rewrite use Data.Text Signed-off-by: Amneesh Singh --- Lib.hs | 8 ++++++++ day1.hs | 23 +++++++++++------------ 2 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 Lib.hs diff --git a/Lib.hs b/Lib.hs new file mode 100644 index 0000000..bcb9b29 --- /dev/null +++ b/Lib.hs @@ -0,0 +1,8 @@ +module Lib (readFile') where + +import qualified Data.ByteString as B (readFile) +import Data.Text (Text) +import qualified Data.Text.Encoding as T (decodeUtf8) + +readFile' :: FilePath -> IO Text +readFile' f = T.decodeUtf8 <$> B.readFile f diff --git a/day1.hs b/day1.hs index 625e6e0..5146127 100644 --- a/day1.hs +++ b/day1.hs @@ -1,22 +1,21 @@ +import Data.Either (isLeft, rights) import Data.List (sortOn) import Data.Ord (Down (Down)) +import Data.Text (Text) +import qualified Data.Text as T (lines) +import qualified Data.Text.Read as T (decimal) +import Lib (readFile') main :: IO () main = do - input <- lines <$> readFile "day1.in" + input <- map T.decimal . T.lines <$> readFile' "day1.in" putStr "Q1: " - print $ q1 input + print . maximum $ calories input putStr "Q2: " - print $ q2 input + print . sum . take 3 . sortOn Down $ calories input -q1 :: [String] -> Int -q1 = maximum . calories - -q2 :: [String] -> Int -q2 = sum . take 3 . sortOn Down . calories - -calories :: [String] -> [Int] +calories :: [Either String (Int, Text)] -> [Int] calories [] = [] calories input = - let (cur, rest) = break null input - in sum (map read cur) : calories (drop 1 rest) + let (cur, rest) = break isLeft input + in sum (map fst $ rights cur) : calories (drop 1 rest)