Added day 7 part 2 with tree approach
This commit is contained in:
parent
19bd0cdac1
commit
5c97578f75
25
src/main.rs
25
src/main.rs
|
@ -105,25 +105,28 @@ fn solution(input: impl Iterator<Item = &'static str>) -> u32 {
|
||||||
|
|
||||||
compute_dir_size(&mut tree);
|
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 {
|
match node {
|
||||||
&Node::File(_) => 0,
|
Node::Directory(dir) if dir.size >= to_freeup => {
|
||||||
|
let mut answer = dir.size;
|
||||||
Node::Directory(dir) => {
|
|
||||||
let mut sum = 0;
|
|
||||||
if dir.size <= 100000 {
|
|
||||||
sum += dir.size;
|
|
||||||
}
|
|
||||||
|
|
||||||
for v in dir.children.values() {
|
for v in dir.children.values() {
|
||||||
sum += part1(v);
|
answer = std::cmp::min(answer, part2(v, to_freeup));
|
||||||
}
|
}
|
||||||
|
|
||||||
sum
|
answer
|
||||||
}
|
}
|
||||||
|
_ => std::u32::MAX,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user