added to main + total fns

This commit is contained in:
Yann Esposito (Yogsototh) 2017-12-22 08:58:03 +01:00
parent 0d8930c6c5
commit e4e6730348
Signed by untrusted user who does not match committer: yogsototh
GPG key ID: 7B19A4C650D59646
4 changed files with 29 additions and 14 deletions

View file

@ -2,7 +2,7 @@
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: d871caa5723224d888f552d659e29f2e860d791e12ad0c0d7ced450d2334b83d -- hash: 877996d6cd90e6a9a1d5d7f01e79fd91225f46e4cf930943da73fad95dda8ea0
name: adventofcode name: adventofcode
version: 0.1.0.0 version: 0.1.0.0
@ -47,8 +47,8 @@ library
Day15 Day15
Day16 Day16
Day17 Day17
other-modules:
Day18 Day18
other-modules:
Permutations Permutations
Paths_adventofcode Paths_adventofcode
build-depends: build-depends:

View file

@ -25,6 +25,7 @@ import qualified Day14
import qualified Day15 import qualified Day15
import qualified Day16 import qualified Day16
import qualified Day17 import qualified Day17
import qualified Day18
showSol :: [Char] -> Doc -> IO () showSol :: [Char] -> Doc -> IO ()
showSol txt d = putText . toS . render $ showSol txt d = putText . toS . render $
@ -55,6 +56,7 @@ solutions = Map.fromList [(["01"], day01)
,(["15"], day15) ,(["15"], day15)
,(["16"], day16) ,(["16"], day16)
,(["17"], day17) ,(["17"], day17)
,(["18"], day18)
] ]
@ -204,3 +206,15 @@ day17 = do
showSol "Solution 1" (int (fromMaybe 0 sol1)) showSol "Solution 1" (int (fromMaybe 0 sol1))
let sol2 = Day17.solution2 50000000 Day17.input let sol2 = Day17.solution2 50000000 Day17.input
showSol "Solution 2" (int sol2) showSol "Solution 2" (int sol2)
day18 :: IO ()
day18 = do
putText "Day 18:"
minput <- Day18.parseInput
case minput of
Nothing -> putText "parsing error!"
Just input -> do
let sol1 = Day18.solution1 input
showSol "Solution 1" (int (fromMaybe 0 sol1))
let sol2 = Day18.solution2 input
showSol "Solution 2" (int sol2)

View file

@ -30,6 +30,7 @@ library:
- Day15 - Day15
- Day16 - Day16
- Day17 - Day17
- Day18
dependencies: dependencies:
- base >=4.7 && <5 - base >=4.7 && <5
- protolude - protolude

View file

@ -148,12 +148,12 @@ data Instruction =
| Jgz Value Value | Jgz Value Value
deriving (Show) deriving (Show)
parseInput :: IO Program parseInput :: IO (Maybe Program)
parseInput = parseTxt <$> readFile "inputs/day18.txt" parseInput = parseTxt <$> readFile "inputs/day18.txt"
parseTxt :: Text -> Program parseTxt :: Text -> Maybe Program
parseTxt txt = let instr = txt & T.lines & map (parseInstr . T.words) in parseTxt txt = let instr = txt & T.lines & map (parseInstr . T.words) in
listArray (0,length instr-1) instr fmap (listArray (0,length instr-1)) (sequenceA instr)
txtToInt :: Text -> Maybe Int txtToInt :: Text -> Maybe Int
txtToInt = fmap fst . head . reads . toS txtToInt = fmap fst . head . reads . toS
@ -162,15 +162,15 @@ parseValue :: Text -> Value
parseValue t = let c = T.head t in parseValue t = let c = T.head t in
if C.isLetter c then R (Reg t) else I (fromMaybe 0 (txtToInt t)) if C.isLetter c then R (Reg t) else I (fromMaybe 0 (txtToInt t))
parseInstr :: [Text] -> Instruction parseInstr :: [Text] -> Maybe Instruction
parseInstr ["snd",v] = Snd (parseValue v) parseInstr ["snd",v] = Just $ Snd (parseValue v)
parseInstr ["set",r,v] = Set (Reg r) (parseValue v) parseInstr ["set",r,v] = Just $ Set (Reg r) (parseValue v)
parseInstr ["add",r,v] = Add (Reg r) (parseValue v) parseInstr ["add",r,v] = Just $ Add (Reg r) (parseValue v)
parseInstr ["mul",r,v] = Mul (Reg r) (parseValue v) parseInstr ["mul",r,v] = Just $ Mul (Reg r) (parseValue v)
parseInstr ["mod",r,v] = Mod (Reg r) (parseValue v) parseInstr ["mod",r,v] = Just $ Mod (Reg r) (parseValue v)
parseInstr ["rcv",r] = Rcv (Reg r) parseInstr ["rcv",r] = Just $ Rcv (Reg r)
parseInstr ["jgz",v1,v2] = Jgz (parseValue v1) (parseValue v2) parseInstr ["jgz",v1,v2] = Just $ Jgz (parseValue v1) (parseValue v2)
parseInstr _ = error "Don't knwow this instruction" parseInstr _ = Nothing
testInput :: Text testInput :: Text
testInput = "set a 1\n\ testInput = "set a 1\n\