day 16: naive solution that obviously doesn’t work
This commit is contained in:
parent
74fe38337f
commit
0624234733
|
@ -0,0 +1,32 @@
|
|||
import Control.Lens
|
||||
import Data.List.Split
|
||||
import qualified Data.Map as M
|
||||
|
||||
type Valves = M.Map String Node
|
||||
|
||||
type Node = (Int, [String])
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
input <- map words . lines <$> readFile "testinput"
|
||||
print $ parse input
|
||||
print $ walk 5 "AA" $ parse input
|
||||
|
||||
parse :: [[String]] -> Valves
|
||||
parse = M.fromList . concatMap parse'
|
||||
where
|
||||
parse' (_:name:_:_:rate:_:_:_:_:ts) =
|
||||
[(name, (0, ("open" ++ name) : nexts)), ("open" ++ name, (r, nexts))]
|
||||
where
|
||||
r = read $ init $ last $ splitOn "=" rate
|
||||
nexts = map (\(x:y:_) -> [x, y]) ts
|
||||
|
||||
-- value multiplicator: 28, 25, etc
|
||||
-- delete opened nodes (both)
|
||||
|
||||
walk :: Int -> String -> Valves -> Int
|
||||
walk n start valves
|
||||
| n == 0 = 0
|
||||
| otherwise = n * rate + maximum [walk (pred n) x valves | x<-nextNodes]
|
||||
where rate = valves M.! start ^._1
|
||||
nextNodes = valves M.! start ^._2
|
Loading…
Reference in New Issue
Block a user