X-Git-Url: https://git.njae.me.uk/?p=advent-of-code-19.git;a=blobdiff_plain;f=advent01%2Fsrc%2Fadvent01.hs;h=5c70f596c4e4d92062f30a2bee20778abbe51e39;hp=e1935f475587e9f1ee771303b31d4e1d659e5681;hb=73861022e114fe3b2d6625301f4ac5fc973a8a6e;hpb=5f20c4799398878a455f64d7b81aadc4a1774dd1 diff --git a/advent01/src/advent01.hs b/advent01/src/advent01.hs index e1935f4..5c70f59 100644 --- a/advent01/src/advent01.hs +++ b/advent01/src/advent01.hs @@ -1,6 +1,3 @@ -{-# LANGUAGE NegativeLiterals #-} -{-# LANGUAGE OverloadedStrings #-} - import Data.Text (Text) import qualified Data.Text.IO as TIO @@ -11,8 +8,6 @@ import Text.Megaparsec.Char import qualified Text.Megaparsec.Char.Lexer as L import qualified Control.Applicative as CA -import Data.IntSet (IntSet) -import qualified Data.IntSet as S main :: IO () main = do @@ -23,16 +18,18 @@ main = do part1 :: [Int] -> Int -part1 = sum +part1 = sum . map fuelRequired part2 :: [Int] -> Int -part2 = snd . head . dropWhile unRepeated . scanl merge (S.empty, 0) . cycle +part2= sum . map fuelForFuel + + +fuelRequired :: Int -> Int +fuelRequired m = (m `div` 3) - 2 -merge :: (IntSet, Int) -> Int -> (IntSet, Int) -merge (frequencies, frequency) change = (S.insert frequency frequencies, frequency + change) +fuelForFuel :: Int -> Int +fuelForFuel m = sum $ takeWhile (> 0) $ drop 1 $ iterate fuelRequired m -unRepeated :: (IntSet, Int) -> Bool -unRepeated (frequencies, frequency) = frequency `S.notMember` frequencies -- Parse the input file type Parser = Parsec Void Text @@ -44,12 +41,12 @@ sc = L.space (skipSome spaceChar) CA.empty CA.empty lexeme = L.lexeme sc integer = lexeme L.decimal -signedInteger = L.signed sc integer +-- signedInteger = L.signed sc integer -changesP = many signedInteger +moduleP = many integer successfulParse :: Text -> [Int] successfulParse input = - case parse changesP "input" input of + case parse moduleP "input" input of Left _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err Right changes -> changes \ No newline at end of file