day2: Complete second puzzle
This commit is contained in:
parent
a497af5d30
commit
31305e22f8
|
@ -4,10 +4,14 @@ main :: IO ()
|
|||
main = do
|
||||
instructions <- getContents
|
||||
putStrLn (solution1 instructions)
|
||||
putStrLn (solution2 instructions)
|
||||
|
||||
solution1 :: String -> String
|
||||
solution1 input = show (uncurry (*) (navigate (parseInstructions input)))
|
||||
|
||||
solution2 :: String -> String
|
||||
solution2 input = show (uncurry (*) (navigate2 (parseInstructions input)))
|
||||
|
||||
parseInstructions :: String -> [(Int, Int)]
|
||||
parseInstructions instructions =
|
||||
map parseLine (lines instructions)
|
||||
|
@ -25,6 +29,15 @@ navigate instructions =
|
|||
sumTuples :: (Int, Int) -> (Int, Int) -> (Int, Int)
|
||||
sumTuples (a, b) (c, d) = (a + c, b + d)
|
||||
|
||||
navigate2 :: [(Int, Int)] -> (Int, Int)
|
||||
navigate2 instructions =
|
||||
takePosition (foldl navigate (0, 0, 0) instructions)
|
||||
where
|
||||
navigate :: (Int, Int, Int) -> (Int, Int) -> (Int, Int, Int)
|
||||
navigate (horz, depth, aim) (speed, dir) = (horz + speed, depth + aim * speed, aim + dir)
|
||||
takePosition :: (Int, Int, Int) -> (Int, Int)
|
||||
takePosition (x,y,_) = (x,y)
|
||||
|
||||
-- Tests
|
||||
|
||||
testInput1 :: String
|
||||
|
@ -39,3 +52,6 @@ testInput1 = unlines [
|
|||
|
||||
test1 :: String
|
||||
test1 = assert ((solution1 testInput1) == "150") "success"
|
||||
|
||||
test2 :: String
|
||||
test2 = assert ((solution2 testInput1) == "900") "success"
|
||||
|
|
Loading…
Reference in a new issue