added to main + total fns
This commit is contained in:
parent
0d8930c6c5
commit
e4e6730348
4 changed files with 29 additions and 14 deletions
|
@ -2,7 +2,7 @@
|
|||
--
|
||||
-- see: https://github.com/sol/hpack
|
||||
--
|
||||
-- hash: d871caa5723224d888f552d659e29f2e860d791e12ad0c0d7ced450d2334b83d
|
||||
-- hash: 877996d6cd90e6a9a1d5d7f01e79fd91225f46e4cf930943da73fad95dda8ea0
|
||||
|
||||
name: adventofcode
|
||||
version: 0.1.0.0
|
||||
|
@ -47,8 +47,8 @@ library
|
|||
Day15
|
||||
Day16
|
||||
Day17
|
||||
other-modules:
|
||||
Day18
|
||||
other-modules:
|
||||
Permutations
|
||||
Paths_adventofcode
|
||||
build-depends:
|
||||
|
|
14
app/Main.hs
14
app/Main.hs
|
@ -25,6 +25,7 @@ import qualified Day14
|
|||
import qualified Day15
|
||||
import qualified Day16
|
||||
import qualified Day17
|
||||
import qualified Day18
|
||||
|
||||
showSol :: [Char] -> Doc -> IO ()
|
||||
showSol txt d = putText . toS . render $
|
||||
|
@ -55,6 +56,7 @@ solutions = Map.fromList [(["01"], day01)
|
|||
,(["15"], day15)
|
||||
,(["16"], day16)
|
||||
,(["17"], day17)
|
||||
,(["18"], day18)
|
||||
]
|
||||
|
||||
|
||||
|
@ -204,3 +206,15 @@ day17 = do
|
|||
showSol "Solution 1" (int (fromMaybe 0 sol1))
|
||||
let sol2 = Day17.solution2 50000000 Day17.input
|
||||
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)
|
||||
|
|
|
@ -30,6 +30,7 @@ library:
|
|||
- Day15
|
||||
- Day16
|
||||
- Day17
|
||||
- Day18
|
||||
dependencies:
|
||||
- base >=4.7 && <5
|
||||
- protolude
|
||||
|
|
24
src/Day18.hs
24
src/Day18.hs
|
@ -148,12 +148,12 @@ data Instruction =
|
|||
| Jgz Value Value
|
||||
deriving (Show)
|
||||
|
||||
parseInput :: IO Program
|
||||
parseInput :: IO (Maybe Program)
|
||||
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
|
||||
listArray (0,length instr-1) instr
|
||||
fmap (listArray (0,length instr-1)) (sequenceA instr)
|
||||
|
||||
txtToInt :: Text -> Maybe Int
|
||||
txtToInt = fmap fst . head . reads . toS
|
||||
|
@ -162,15 +162,15 @@ parseValue :: Text -> Value
|
|||
parseValue t = let c = T.head t in
|
||||
if C.isLetter c then R (Reg t) else I (fromMaybe 0 (txtToInt t))
|
||||
|
||||
parseInstr :: [Text] -> Instruction
|
||||
parseInstr ["snd",v] = Snd (parseValue v)
|
||||
parseInstr ["set",r,v] = Set (Reg r) (parseValue v)
|
||||
parseInstr ["add",r,v] = Add (Reg r) (parseValue v)
|
||||
parseInstr ["mul",r,v] = Mul (Reg r) (parseValue v)
|
||||
parseInstr ["mod",r,v] = Mod (Reg r) (parseValue v)
|
||||
parseInstr ["rcv",r] = Rcv (Reg r)
|
||||
parseInstr ["jgz",v1,v2] = Jgz (parseValue v1) (parseValue v2)
|
||||
parseInstr _ = error "Don't knwow this instruction"
|
||||
parseInstr :: [Text] -> Maybe Instruction
|
||||
parseInstr ["snd",v] = Just $ Snd (parseValue v)
|
||||
parseInstr ["set",r,v] = Just $ Set (Reg r) (parseValue v)
|
||||
parseInstr ["add",r,v] = Just $ Add (Reg r) (parseValue v)
|
||||
parseInstr ["mul",r,v] = Just $ Mul (Reg r) (parseValue v)
|
||||
parseInstr ["mod",r,v] = Just $ Mod (Reg r) (parseValue v)
|
||||
parseInstr ["rcv",r] = Just $ Rcv (Reg r)
|
||||
parseInstr ["jgz",v1,v2] = Just $ Jgz (parseValue v1) (parseValue v2)
|
||||
parseInstr _ = Nothing
|
||||
|
||||
testInput :: Text
|
||||
testInput = "set a 1\n\
|
||||
|
|
Loading…
Reference in a new issue