add a draft solution for day 7
This commit is contained in:
parent
964119473d
commit
671e0ee18d
1 changed files with 90 additions and 5 deletions
|
@ -1,14 +1,99 @@
|
|||
use std::path::PathBuf;
|
||||
use std::fs::File;
|
||||
use std::io::{BufReader,Lines};
|
||||
use crate::util::read_lines;
|
||||
use std::cell::{Ref, RefCell};
|
||||
use std::fs::File;
|
||||
use std::io::{BufReader, Lines};
|
||||
use std::path::PathBuf;
|
||||
use std::rc::{Rc, Weak};
|
||||
|
||||
#[derive(Debug)]
|
||||
enum FsNodeType {
|
||||
File,
|
||||
Directory,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct FsNode {
|
||||
vname: String,
|
||||
vsize: u64,
|
||||
vtype: FsNodeType,
|
||||
parent: RefCell<Weak<FsNode>>,
|
||||
childs: RefCell<Vec<Rc<FsNode>>>,
|
||||
}
|
||||
|
||||
impl FsNode {
|
||||
fn new() -> Rc<FsNode> {
|
||||
Rc::new(FsNode {
|
||||
vname: String::new(),
|
||||
vsize: (0),
|
||||
vtype: (FsNodeType::File),
|
||||
parent: RefCell::new(Weak::new()),
|
||||
childs: (RefCell::new(Vec::new())),
|
||||
})
|
||||
}
|
||||
|
||||
fn new_file(fname: &str, size: u64) -> Rc<FsNode> {
|
||||
Rc::new(FsNode {
|
||||
vname: (fname.to_string()),
|
||||
vsize: (size),
|
||||
vtype: (FsNodeType::File),
|
||||
parent: RefCell::new(Weak::new()),
|
||||
childs: (RefCell::new(Vec::new())),
|
||||
})
|
||||
}
|
||||
|
||||
fn new_dir(fname: &str) -> Rc<FsNode> {
|
||||
Rc::new(FsNode {
|
||||
vname: (fname.to_string()),
|
||||
vsize: (0),
|
||||
vtype: (FsNodeType::Directory),
|
||||
parent: RefCell::new(Weak::new()),
|
||||
childs: (RefCell::new(Vec::new())),
|
||||
})
|
||||
}
|
||||
|
||||
fn set_parent(&self, new_parent: &Rc<FsNode>) {
|
||||
*self.parent.borrow_mut() = Rc::downgrade(new_parent);
|
||||
}
|
||||
|
||||
fn add_child_node(&self, cf: Rc<FsNode>) {
|
||||
match self.vtype {
|
||||
FsNodeType::File => {}
|
||||
FsNodeType::Directory => self.childs.borrow_mut().push(cf),
|
||||
}
|
||||
}
|
||||
|
||||
fn get_size(&self) ->u64{
|
||||
self.vsize
|
||||
}
|
||||
|
||||
fn get_size_of_tree(&self) -> u64{
|
||||
let mut csize:u64 = self.vsize;
|
||||
for c in self.childs.borrow().iter(){
|
||||
csize += c.get_size_of_tree();
|
||||
}
|
||||
csize
|
||||
}
|
||||
|
||||
fn get_parent(&self) -> Option<Rc<FsNode>> {
|
||||
self.parent.borrow().upgrade()
|
||||
}
|
||||
|
||||
fn get_child(&self) -> Ref<Vec<Rc<FsNode>>> {
|
||||
self.childs.borrow()
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(lines: Lines<BufReader<File>>) {
|
||||
|
||||
let tnode1: Rc<FsNode> = FsNode::new_dir("test");
|
||||
let tnode2: Rc<FsNode> = FsNode::new_file("test", 10);
|
||||
tnode2.set_parent(&tnode1);
|
||||
tnode1.add_child_node(tnode2);
|
||||
tnode1.add_child_node(FsNode::new_file("tesd234", 55));
|
||||
println!("{:?}", tnode1.get_size_of_tree())
|
||||
}
|
||||
|
||||
pub fn subcmd_day007(file: &Option<PathBuf>, alt: &bool) {
|
||||
if let Ok(lines) = read_lines(file.as_ref().unwrap().as_path()) {
|
||||
|
||||
part1(lines);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue