day 1: rewrite
use Data.Text Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
This commit is contained in:
		
							
								
								
									
										8
									
								
								Lib.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Lib.hs
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
							
								
								
									
										23
									
								
								day1.hs
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								day1.hs
									
									
									
									
									
								
							@@ -1,22 +1,21 @@
 | 
				
			|||||||
 | 
					import Data.Either (isLeft, rights)
 | 
				
			||||||
import Data.List (sortOn)
 | 
					import Data.List (sortOn)
 | 
				
			||||||
import Data.Ord (Down (Down))
 | 
					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 :: IO ()
 | 
				
			||||||
main = do
 | 
					main = do
 | 
				
			||||||
  input <- lines <$> readFile "day1.in"
 | 
					  input <- map T.decimal . T.lines <$> readFile' "day1.in"
 | 
				
			||||||
  putStr "Q1: "
 | 
					  putStr "Q1: "
 | 
				
			||||||
  print $ q1 input
 | 
					  print . maximum $ calories input
 | 
				
			||||||
  putStr "Q2: "
 | 
					  putStr "Q2: "
 | 
				
			||||||
  print $ q2 input
 | 
					  print . sum . take 3 . sortOn Down $ calories input
 | 
				
			||||||
 | 
					
 | 
				
			||||||
q1 :: [String] -> Int
 | 
					calories :: [Either String (Int, Text)] -> [Int]
 | 
				
			||||||
q1 = maximum . calories
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
q2 :: [String] -> Int
 | 
					 | 
				
			||||||
q2 = sum . take 3 . sortOn Down . calories
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
calories :: [String] -> [Int]
 | 
					 | 
				
			||||||
calories [] = []
 | 
					calories [] = []
 | 
				
			||||||
calories input =
 | 
					calories input =
 | 
				
			||||||
  let (cur, rest) = break null input
 | 
					  let (cur, rest) = break isLeft input
 | 
				
			||||||
   in sum (map read cur) : calories (drop 1 rest)
 | 
					   in sum (map fst $ rights cur) : calories (drop 1 rest)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user