projects
/
advent-of-code-19.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Updated readme
[advent-of-code-19.git]
/
advent01
/
src
/
advent01.hs
diff --git
a/advent01/src/advent01.hs
b/advent01/src/advent01.hs
index e1935f475587e9f1ee771303b31d4e1d659e5681..5c70f596c4e4d92062f30a2bee20778abbe51e39 100644
(file)
--- 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
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 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
main :: IO ()
main = do
@@
-23,16
+18,18
@@
main = do
part1 :: [Int] -> Int
part1 :: [Int] -> Int
-part1 = sum
+part1 = sum
. map fuelRequired
part2 :: [Int] -> Int
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
-- 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
lexeme = L.lexeme sc
integer = lexeme L.decimal
-signedInteger = L.signed sc integer
+
--
signedInteger = L.signed sc integer
-
changesP = many signedI
nteger
+
moduleP = many i
nteger
successfulParse :: Text -> [Int]
successfulParse input =
successfulParse :: Text -> [Int]
successfulParse input =
- case parse
changes
P "input" input of
+ case parse
module
P "input" input of
Left _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err
Right changes -> changes
\ No newline at end of file
Left _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err
Right changes -> changes
\ No newline at end of file