Start day 7 part 1
This commit is contained in:
parent
fd789caa45
commit
34a7dd17fa
7
day7/Cargo.lock
generated
Normal file
7
day7/Cargo.lock
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day7"
|
||||||
|
version = "0.1.0"
|
8
day7/Cargo.toml
Normal file
8
day7/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day7"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
1083
day7/src/input.txt
Normal file
1083
day7/src/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
72
day7/src/main.rs
Normal file
72
day7/src/main.rs
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
const MAX_DIR_SIZE: u128 = 100_000;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct File {
|
||||||
|
name: String,
|
||||||
|
size: u128,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl File {
|
||||||
|
fn new<T: ToString + ?Sized>(raw_line: &T) -> Self {
|
||||||
|
let raw = raw_line.to_string();
|
||||||
|
let parts: Vec<&str> = raw.split(' ').collect();
|
||||||
|
let size = parts[0].parse::<u128>().unwrap();
|
||||||
|
let name = parts[1].to_string();
|
||||||
|
|
||||||
|
File { name, size }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Dir {
|
||||||
|
parent: String,
|
||||||
|
name: String,
|
||||||
|
files: Vec<File>,
|
||||||
|
dirs: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Dir {
|
||||||
|
fn new<T: ToString + ?Sized>(parent: &T, name: &T) -> Self {
|
||||||
|
Dir {
|
||||||
|
parent: parent.to_string(),
|
||||||
|
name: name.to_string(),
|
||||||
|
files: Vec::new(),
|
||||||
|
dirs: Vec::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_loose_files_size(&self) -> u128 {
|
||||||
|
self.files
|
||||||
|
.iter()
|
||||||
|
.map(|file| file.size)
|
||||||
|
.reduce(|accum, item| accum + item)
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
struct DirMap {
|
||||||
|
current_path: String,
|
||||||
|
map: HashMap<String, Dir>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DirMap {
|
||||||
|
fn new() -> Self {
|
||||||
|
DirMap {
|
||||||
|
current_path: "/".to_string(),
|
||||||
|
map: HashMap::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let file_str = include_str!("input.txt");
|
||||||
|
let path_map = DirMap::new();
|
||||||
|
}
|
Reference in New Issue
Block a user