day 07 in progress. Have data structure skeleton down.
This commit is contained in:
parent
e0ba8a18f1
commit
4c11c4df3e
|
@ -34,6 +34,10 @@ path="src/day05/solve.rs"
|
||||||
name="day06"
|
name="day06"
|
||||||
path="src/day06/solve.rs"
|
path="src/day06/solve.rs"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name="day07"
|
||||||
|
path="src/day07/solve.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
regex="1"
|
regex="1"
|
||||||
once_cell = "1.16.0"
|
once_cell = "1.16.0"
|
||||||
|
|
21
src/day07/fileTree.rs
Normal file
21
src/day07/fileTree.rs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
use std::{rc::{Weak, Rc}, cell::RefCell};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Dir {
|
||||||
|
parent: Option<Weak<RefCell<Dir>>>,
|
||||||
|
name: String,
|
||||||
|
children: Vec<Rc<RefCell<FileOrDir>>>
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct File{
|
||||||
|
dir: Weak<RefCell<Dir>>,
|
||||||
|
size: usize,
|
||||||
|
name: String
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum FileOrDir{
|
||||||
|
File(File),
|
||||||
|
Dir(Dir),
|
||||||
|
}
|
1031
src/day07/input.txt
1031
src/day07/input.txt
File diff suppressed because it is too large
Load diff
155
src/day07/parser.rs
Normal file
155
src/day07/parser.rs
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
use crate::fileTree::*;
|
||||||
|
use once_cell::sync::Lazy;
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
|
pub enum Command {
|
||||||
|
CdRoot,
|
||||||
|
CdUp,
|
||||||
|
Cd(String),
|
||||||
|
Ls(Vec<LsEntry>),
|
||||||
|
}
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
|
pub enum LsEntry {
|
||||||
|
Dir(String),
|
||||||
|
File(ParseFile),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
|
pub struct ParseFile {
|
||||||
|
size: usize,
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
pub fn parse(input: &str) -> Dir {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn parse_to_tree(input: Vec<Command>) -> Dir {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
|
//parses a single line
|
||||||
|
pub fn parse_to_commands(input: &str) -> Vec<Command> {
|
||||||
|
static PARSE_COMMAND_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"^$").unwrap());
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
/* #[test]
|
||||||
|
fn test_parse() {
|
||||||
|
let input = "$ cd /
|
||||||
|
$ ls
|
||||||
|
dir a
|
||||||
|
14848514 b.txt
|
||||||
|
8504156 c.dat
|
||||||
|
dir d
|
||||||
|
$ cd a
|
||||||
|
$ ls
|
||||||
|
dir e
|
||||||
|
29116 f
|
||||||
|
2557 g
|
||||||
|
62596 h.lst
|
||||||
|
$ cd e
|
||||||
|
$ ls
|
||||||
|
584 i
|
||||||
|
$ cd ..
|
||||||
|
$ cd ..
|
||||||
|
$ cd d
|
||||||
|
$ ls
|
||||||
|
4060174 j
|
||||||
|
8033020 d.log
|
||||||
|
5626152 d.ext
|
||||||
|
7214296 k";
|
||||||
|
assert_eq!(parse(input), 0);
|
||||||
|
} */
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_parse_to_commands() {
|
||||||
|
let input = "$ cd /
|
||||||
|
$ ls
|
||||||
|
dir a
|
||||||
|
14848514 b.txt
|
||||||
|
8504156 c.dat
|
||||||
|
dir d
|
||||||
|
$ cd a
|
||||||
|
$ ls
|
||||||
|
dir e
|
||||||
|
29116 f
|
||||||
|
2557 g
|
||||||
|
62596 h.lst
|
||||||
|
$ cd e
|
||||||
|
$ ls
|
||||||
|
584 i
|
||||||
|
$ cd ..
|
||||||
|
$ cd ..
|
||||||
|
$ cd d
|
||||||
|
$ ls
|
||||||
|
4060174 j
|
||||||
|
8033020 d.log
|
||||||
|
5626152 d.ext
|
||||||
|
7214296 k";
|
||||||
|
assert_eq!(
|
||||||
|
parse_to_commands(input),
|
||||||
|
vec![
|
||||||
|
Command::CdRoot,
|
||||||
|
Command::Ls(vec![
|
||||||
|
LsEntry::Dir(String::from("a")),
|
||||||
|
LsEntry::File(ParseFile {
|
||||||
|
size: 14848514,
|
||||||
|
name: String::from("b.txt")
|
||||||
|
}),
|
||||||
|
LsEntry::File(ParseFile {
|
||||||
|
size: 8504156,
|
||||||
|
name: String::from("c.dat")
|
||||||
|
}),
|
||||||
|
LsEntry::Dir(String::from("d"))
|
||||||
|
]),
|
||||||
|
Command::Cd(String::from("a")),
|
||||||
|
Command::Ls(vec![
|
||||||
|
LsEntry::Dir(String::from("e")),
|
||||||
|
LsEntry::File(ParseFile {
|
||||||
|
size: 29116,
|
||||||
|
name: String::from("f")
|
||||||
|
}),
|
||||||
|
LsEntry::File(ParseFile {
|
||||||
|
size: 2557,
|
||||||
|
name: String::from("g")
|
||||||
|
}),
|
||||||
|
LsEntry::File(ParseFile {
|
||||||
|
size: 62596,
|
||||||
|
name: String::from("h.lst")
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
Command::Cd(String::from("e")),
|
||||||
|
Command::Ls(vec![LsEntry::File(ParseFile {
|
||||||
|
size: 484,
|
||||||
|
name: String::from("i")
|
||||||
|
}),]),
|
||||||
|
Command::CdUp,
|
||||||
|
Command::CdUp,
|
||||||
|
Command::Cd(String::from("d")),
|
||||||
|
Command::Ls(vec![
|
||||||
|
LsEntry::File(ParseFile {
|
||||||
|
size: 4060174,
|
||||||
|
name: String::from("j")
|
||||||
|
}),
|
||||||
|
LsEntry::File(ParseFile {
|
||||||
|
size: 8033020,
|
||||||
|
name: String::from("d.log")
|
||||||
|
}),
|
||||||
|
LsEntry::File(ParseFile {
|
||||||
|
size: 5626152,
|
||||||
|
name: String::from("d.ext")
|
||||||
|
}),
|
||||||
|
LsEntry::File(ParseFile {
|
||||||
|
size: 7214296,
|
||||||
|
name: String::from("k")
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
use crate::utilities::*;
|
use crate::fileTree::*;
|
||||||
|
use crate::parser::*;
|
||||||
|
|
||||||
pub fn part1() -> usize {
|
pub fn part1() -> usize {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use crate::utilities::*;
|
use crate::fileTree::*;
|
||||||
|
use crate::parser::*;
|
||||||
|
|
||||||
pub fn part2() -> usize {
|
pub fn part2() -> usize {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
mod part1;
|
mod part1;
|
||||||
mod part2;
|
mod part2;
|
||||||
mod utilities;
|
mod parser;
|
||||||
|
mod fileTree;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let _input = include_str!("./input.txt");
|
let _input = include_str!("./input.txt");
|
||||||
let _structured_input = utilities::parse(_input);
|
let _structured_input = parser::parse(_input);
|
||||||
|
|
||||||
println!("Part One");
|
println!("Part One");
|
||||||
println!("Result: {}", part1::part1());
|
println!("Result: {}", part1::part1());
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
pub fn parse(input: &str) -> usize {
|
|
||||||
unimplemented!()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_parse() {
|
|
||||||
let input =
|
|
||||||
"test"
|
|
||||||
;
|
|
||||||
assert_eq!(parse(input), 0);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue