Day 7 Part 2

此提交包含在:
Jens Kadenbach
2022-12-07 16:24:38 +01:00
父節點 7d1a8b8f5c
當前提交 33871a7f64
共有 2 個檔案被更改,包括 36 行新增4 行删除

23
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

查看文件

@@ -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)