diff --git a/ressources/day07-input-test b/ressources/day07-input-test new file mode 100644 index 0000000..09a921e --- /dev/null +++ b/ressources/day07-input-test @@ -0,0 +1,23 @@ +$ cd / +$ ls +dir a +14848514 b.txt +8504156 c.dat +dir d +$ cd a +$ ls +dir e +29116 f +2557 g +62596 h.lst +$ cd e +$ ls +584 i +$ cd .. +$ cd .. +$ cd d +$ ls +4060174 j +8033020 d.log +5626152 d.ext +7214296 k diff --git a/src/Day7.hs b/src/Day7.hs index e25e21b..a7d55d3 100644 --- a/src/Day7.hs +++ b/src/Day7.hs @@ -81,7 +81,6 @@ filterDirectories predicate dir = filter (\(_, size) -> predicate size) $ sizeOf sumUp :: [(String, Int)] -> Int sumUp = sum . map snd - forceRight :: Either a b -> b forceRight (Left _) = error "forced Right but got Left" forceRight (Right b) = b @@ -92,6 +91,16 @@ day7 = do putStrLn "Day7" let parsed = forceRight $ parseTerminalLines input let tree = buildTree parsed - let filtered = filterDirectories (<= 100000) tree - let summed = sumUp filtered - putStrLn ("Sum of those directories is " ++ show summed) + let small = filterDirectories (<= 100000) tree + let sumOfSmall = sumUp small + putStrLn ("Sum of those directories is " ++ show sumOfSmall) + let rootSize = snd . head $ sizeOfDirectories tree + putStrLn ("Root size is " ++ show rootSize) + let freeSpace = 70000000 - rootSize + let requiredSpace = 30000000 - freeSpace + putStrLn ("Required space is " ++ show requiredSpace) + let bigEnough = filterDirectories (>= requiredSpace) tree + let onlySizes = map snd bigEnough + let smallest = minimum onlySizes + putStrLn ("Smallest directory that is still large enough " ++ show smallest) +