1
0
Fork 0

Day 7 Completed.

This commit is contained in:
Yohan Boujon 2023-10-31 14:32:30 +01:00
parent 0fce2aa521
commit cdcbb1a367

View file

@ -1,5 +1,7 @@
use std::cmp;
use std::fs::read_to_string; use std::fs::read_to_string;
mod system; mod system;
use system::Directory;
use system::Disk; use system::Disk;
fn decode(cmd: Vec<&str>) -> Disk { fn decode(cmd: Vec<&str>) -> Disk {
@ -30,7 +32,7 @@ fn decode(cmd: Vec<&str>) -> Disk {
disk disk
} }
fn list_dirs(disk: &Disk, max: u64) -> u64 { fn first_part(disk: &Disk, max: u64) -> u64 {
let mut sum = 0; let mut sum = 0;
for iter in disk for iter in disk
.get_directories() .get_directories()
@ -47,9 +49,30 @@ fn list_dirs(disk: &Disk, max: u64) -> u64 {
sum sum
} }
fn second_part(disk: &Disk, disk_space: u64, update_space: u64) {
let directories = disk.get_directories();
let needed_space = update_space - (disk_space - disk.get_size(directories[0]));
println!("Needed space: {}", needed_space);
let big_directories: Vec<&&Directory> = directories
.iter()
.filter(|dir| disk.get_size(dir) >= needed_space)
.collect();
let (_, dir) = big_directories
.iter()
.enumerate()
.min_by(|(_, a), (_, b)| disk.get_size(a).cmp(&disk.get_size(b)))
.unwrap();
println!(
"Directory to delete : {},\twith size: {}",
disk.get_path(dir),
disk.get_size(dir)
);
}
fn main() { fn main() {
let file_content = read_to_string("input").unwrap(); let file_content = read_to_string("input").unwrap();
let final_disk = decode(file_content.split("\n").collect()); let final_disk = decode(file_content.split("\n").collect());
final_disk.print(); final_disk.print();
println!("Total sum: {}", list_dirs(&final_disk, 100000)); println!("Total sum: {}", first_part(&final_disk, 100000));
second_part(&final_disk, 70000000, 30000000);
} }