From 5c97578f75a10db480f42c1182ad87186c3989b7 Mon Sep 17 00:00:00 2001 From: Ishan Jain Date: Wed, 7 Dec 2022 21:24:01 +0530 Subject: [PATCH] Added day 7 part 2 with tree approach --- src/main.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index d292c62..4d35172 100644 --- a/src/main.rs +++ b/src/main.rs @@ -105,25 +105,28 @@ fn solution(input: impl Iterator) -> u32 { compute_dir_size(&mut tree); - part1(&tree) + let total = 70000000; + let required = 30000000; + + let Node::Directory(ref root) = tree else { unreachable!("not a directory") }; + + let to_freeup = root.size + required - total; + + part2(&tree, to_freeup) } -fn part1(node: &Node) -> u32 { +fn part2(node: &Node, to_freeup: u32) -> u32 { match node { - &Node::File(_) => 0, - - Node::Directory(dir) => { - let mut sum = 0; - if dir.size <= 100000 { - sum += dir.size; - } + Node::Directory(dir) if dir.size >= to_freeup => { + let mut answer = dir.size; for v in dir.children.values() { - sum += part1(v); + answer = std::cmp::min(answer, part2(v, to_freeup)); } - sum + answer } + _ => std::u32::MAX, } }