This commit is contained in:
Jonathan Chan 2018-12-07 23:25:58 -08:00
parent effae7bb4e
commit a32b2c7628
3 changed files with 23 additions and 3 deletions

View File

@ -30,4 +30,4 @@ import qualified Day24
import qualified Day25
main :: IO ()
main = Day07.main
main = Day08.main

1
input/08.txt Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,25 @@
module Day08 (main) where
import Data.Tree (Tree(Node), rootLabel, subForest)
type Metadata = [Int]
parseTree :: ([Tree Metadata], [Int]) -> ([Tree Metadata], [Int])
parseTree (nodes, (c:m:input)) =
let (children, remaining) = iterate parseTree ([], input) !! c
in (Node (take m remaining) (reverse children) : nodes, drop m remaining)
part1 :: Tree Metadata -> Int
part1 = sum . fmap sum
part2 :: Tree Metadata -> Int
part2 tree =
if null (subForest tree) then sum (rootLabel tree)
else sum . map (part2 . (subForest tree !!) . subtract 1) . filter (<= length (subForest tree)) $ rootLabel tree
main :: IO ()
main = do
input <- readFile "input/08.txt"
print input
input <- map read . words <$> readFile "input/08.txt"
let tree = head . fst $ parseTree ([], input)
print $ part1 tree
print $ part2 tree