projects
/
advent-of-code-18.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
3daf026
)
Better variable names, simpler parser
author
Neil Smith
<neil.git@njae.me.uk>
Sat, 1 Dec 2018 13:28:20 +0000
(13:28 +0000)
committer
Neil Smith
<neil.git@njae.me.uk>
Sat, 1 Dec 2018 13:28:20 +0000
(13:28 +0000)
src/advent01/advent01.hs
patch
|
blob
|
history
diff --git
a/src/advent01/advent01.hs
b/src/advent01/advent01.hs
index 3b7a71c50a68713884cfb3468b92353389d68b3f..d833bbcc96814d40be8b7094383e40c067837397 100644
(file)
--- a/
src/advent01/advent01.hs
+++ b/
src/advent01/advent01.hs
@@
-12,7
+12,7
@@
import qualified Text.Megaparsec.Char.Lexer as L
import qualified Control.Applicative as CA
import Data.IntSet (IntSet)
import qualified Control.Applicative as CA
import Data.IntSet (IntSet)
-import qualified Data.IntSet as
IntSet
+import qualified Data.IntSet as
S
main :: IO ()
main = do
main :: IO ()
main = do
@@
-26,33
+26,27
@@
part1 :: [Int] -> Int
part1 = sum
part2 :: [Int] -> Int
part1 = sum
part2 :: [Int] -> Int
-part2 changes = snd $ head $ dropWhile unRepeated $ scanl merge (IntSet.empty, 0) $ cycle changes
-
+part2 changes = snd $ head $ dropWhile unRepeated $ scanl merge (S.empty, 0) $ cycle changes
merge :: (IntSet, Int) -> Int -> (IntSet, Int)
merge :: (IntSet, Int) -> Int -> (IntSet, Int)
-merge (
s, f) c = (IntSet.insert f s, f+c
)
+merge (
frequencies, frequency) change = (S.insert frequency frequencies, frequency + change
)
unRepeated :: (IntSet, Int) -> Bool
unRepeated :: (IntSet, Int) -> Bool
-unRepeated (
s, f) = f `IntSet.notMember`
s
+unRepeated (
frequencies, frequency) = frequency `S.notMember` frequencie
s
-- Parse the input file
type Parser = Parsec Void Text
sc :: Parser ()
-- Parse the input file
type Parser = Parsec Void Text
sc :: Parser ()
-
--
sc = L.space (skipSome spaceChar) CA.empty CA.empty
-sc = L.space (skipSome (char ' ')) CA.empty CA.empty
+sc = L.space (skipSome spaceChar) CA.empty CA.empty
+
--
sc = L.space (skipSome (char ' ')) CA.empty CA.empty
lexeme = L.lexeme sc
integer = lexeme L.decimal
signedInteger = L.signed sc integer
lexeme = L.lexeme sc
integer = lexeme L.decimal
signedInteger = L.signed sc integer
--- symb = L.symbol sc
--- comma = symb ","
-
-
-changesP = signedInteger `sepEndBy` newline
-
+changesP = many signedInteger
successfulParse :: Text -> [Int]
successfulParse input =
successfulParse :: Text -> [Int]
successfulParse input =