diff --git a/Cargo.lock b/Cargo.lock index 817b593..40b84f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,7 @@ dependencies = [ "day_3", "day_4", "day_5", + "day_6", "solver_base", "utils", ] @@ -55,6 +56,14 @@ dependencies = [ "utils", ] +[[package]] +name = "day_6" +version = "0.1.0" +dependencies = [ + "solver_base", + "utils", +] + [[package]] name = "solver_base" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index ab52df8..d7ded4f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,8 @@ members = [ "crates/day_2", "crates/day_3", "crates/day_4", - "crates/day_5" + "crates/day_5", + "crates/day_6" ] [dependencies] @@ -23,6 +24,7 @@ day_2 = { workspace = true } day_3 = { workspace = true } day_4 = { workspace = true } day_5 = { workspace = true } +day_6 = { workspace = true } [workspace.dependencies] @@ -32,4 +34,5 @@ day_1 = { path = "crates/day_1" } day_2 = { path = "crates/day_2" } day_3 = { path = "crates/day_3" } day_4 = { path = "crates/day_4" } -day_5 = { path = "crates/day_5" } \ No newline at end of file +day_5 = { path = "crates/day_5" } +day_6 = { path = "crates/day_6" } \ No newline at end of file diff --git a/crates/day_6/Cargo.toml b/crates/day_6/Cargo.toml new file mode 100644 index 0000000..4145152 --- /dev/null +++ b/crates/day_6/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "day_6" +description = "Day 6 of the Advent of Code 2024" +version = "0.1.0" +edition = "2021" + +[dependencies] +solver_base = { workspace = true } +utils = { workspace = true } \ No newline at end of file diff --git a/crates/day_6/build.rs b/crates/day_6/build.rs new file mode 100644 index 0000000..4cd9495 --- /dev/null +++ b/crates/day_6/build.rs @@ -0,0 +1,33 @@ + +use std::{env, fs, path::Path}; + +fn main() +{ + // let out_dir = env::var("OUT_DIR").unwrap(); + // let cwd = env::var("CARGO_MANIFEST_DIR").unwrap(); + // println!("CWD: {}\n", cwd); + // let data_dir = cwd + "\\data"; + // let data_path = Path::new(&data_dir); + // println!("Data path: {}", data_path.to_string_lossy()); + + // let data_path = Path::new("data/test_input"); + + // let out_dir = env::var("OUT_DIR").unwrap(); + // panic!("out_dir: {}", out_dir); + let out_path = format!("../../target/{}", &env::var("PROFILE").unwrap()); + let out_path = Path::new(&out_path); + //let out_path = Path::new(&out_dir).join(&env::var("PROFILE").unwrap()); + let out_path_data = out_path.join(Path::new("data")); + + if !out_path_data.exists() + { + fs::create_dir(&out_path_data).expect(&format!("Could not create data directory at: {}", out_path_data.to_string_lossy())); + } + + for file in fs::read_dir("data").unwrap() + { + let file = file.unwrap(); + let dest = out_path.join(file.path()); + fs::copy(file.path(), &dest).expect(&format!("Could not copy file {} to {}", file.path().to_string_lossy(), dest.to_string_lossy())); + } +} \ No newline at end of file diff --git a/crates/day_6/src/day_6.rs b/crates/day_6/src/day_6.rs new file mode 100644 index 0000000..8040efb --- /dev/null +++ b/crates/day_6/src/day_6.rs @@ -0,0 +1,93 @@ + +/****************************************************************************** +* @file day_5.rs +* @author Joey Pollack +* @date 2024/12/05 (y/m/d) +* @modified 2024/12/05 (y/m/d) +* @copyright Joseph R Pollack +* @brief Advent of Code 2024 day 5 problems +******************************************************************************/ + +use ::solver_base::solver_base::{Solver, DataSet, RunMode}; +use utils::utils; + +pub struct Day5 +{ + data_set: DataSet, + run_mode: RunMode, + do_debug_prints: bool, + pub final_result: i32, +} + +//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +// DAY 4 IMPL +//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +impl Day5 +{ + pub fn new() -> Day5 + { + Day5 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, final_result: 0 } + } + + fn solve_first_case(self: &mut Self) -> String + { + + self.final_result.to_string() + } + + fn solve_second_case(self: &mut Self) -> String + { + + + self.final_result.to_string() + } +} + +//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +// SOLVER TRAIT IMPL +//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +impl Solver for Day5 +{ + fn print_test() + { + println!("DAY 4 TEST PRINT"); + } + + fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool) + { + self.data_set = data_set; + self.run_mode = run_mode; + self.do_debug_prints = enable_debug_prints; + + let dir = utils::get_working_dir(); + let data_filename = + match self.data_set + { + DataSet::Test => format!("{}/data/day5_test_input", dir), + DataSet::TestAlt => panic!("Day 5: There is no TestAlt input file!"), //format!("{}/data/day2_test_input", dir), + DataSet::Full => format!("{}/data/day5_input", dir), + }; + + let _data = utils::load_data(&data_filename); + + // TODO: Day5::init + + } + + fn solve(self: &mut Self) -> String + { + match self.run_mode + { + RunMode::FirstCase => + { + self.solve_first_case() + }, + + RunMode::SecondCase => + { + self.solve_second_case() + } + } + } + +} \ No newline at end of file diff --git a/crates/day_6/src/lib.rs b/crates/day_6/src/lib.rs new file mode 100644 index 0000000..e289fdf --- /dev/null +++ b/crates/day_6/src/lib.rs @@ -0,0 +1,2 @@ + +pub mod day_6; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index a915d6c..9fda343 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,6 +11,7 @@ use day_1::day_1::Day1; use day_2::day_2::Day2; use day_3::day_3::Day3; use day_4::day_4::Day4; +use day_5::day_5::Day5; use solver_base::solver_base::{Solver, DataSet, RunMode}; fn main() @@ -19,12 +20,12 @@ fn main() let mut day_1 = Day1::new(); day_1.init(DataSet::Full, RunMode::FirstCase, false); let day1_result = day_1.solve(); - println!("Day1 Part 1 Final Result: {}", day1_result); + println!("Day 1 Part 1 Final Result: {}", day1_result); let mut day_1 = Day1::new(); day_1.init(DataSet::Full, RunMode::SecondCase, false); let day1_result = day_1.solve(); - println!("Day1 Part 2 Final Result: {}", day1_result); + println!("Day 1 Part 2 Final Result: {}", day1_result); println!("-------------------------"); @@ -33,12 +34,12 @@ fn main() let mut day_2 = Day2::new(); day_2.init(DataSet::Full, RunMode::FirstCase, false); let day2_result = day_2.solve(); - println!("Day2 Part 1 Final Result: {}", day2_result); + println!("Day 2 Part 1 Final Result: {}", day2_result); let mut day_2 = Day2::new(); day_2.init(DataSet::Full, RunMode::SecondCase, false); let day2_result = day_2.solve(); - println!("Day2 Part 2 Final Result: {}", day2_result); + println!("Day 2 Part 2 Final Result: {}", day2_result); println!("-------------------------"); @@ -46,12 +47,12 @@ fn main() let mut day_3 = Day3::new(); day_3.init(DataSet::Full, RunMode::FirstCase, false); let day3_result = day_3.solve(); - println!("Day3 Part 1 Final Result: {}", day3_result); + println!("Day 3 Part 1 Final Result: {}", day3_result); let mut day_3 = Day3::new(); day_3.init(DataSet::Full, RunMode::SecondCase, false); let day3_result = day_3.solve(); - println!("Day3 Part 2 Final Result: {}", day3_result); + println!("Day 3 Part 2 Final Result: {}", day3_result); println!("-------------------------"); @@ -59,12 +60,25 @@ fn main() let mut day_4 = Day4::new(); day_4.init(DataSet::Full, RunMode::FirstCase, false); let day4_result = day_4.solve(); - println!("Day4 Part 1 Final Result: {}", day4_result); + println!("Day 4 Part 1 Final Result: {}", day4_result); let mut day_4 = Day4::new(); day_4.init(DataSet::Full, RunMode::SecondCase, false); let day4_result = day_4.solve(); - println!("Day4 Part 2 Final Result: {}", day4_result); + println!("Day 4 Part 2 Final Result: {}", day4_result); + + println!("-------------------------"); + + // DAY 5 + let mut day_5 = Day5::new(); + day_5.init(DataSet::Test, RunMode::FirstCase, false); + let day5_result = day_5.solve(); + println!("Day 5 Part 1 Final Result: {}", day5_result); + + let mut day_5 = Day5::new(); + day_5.init(DataSet::Test, RunMode::SecondCase, false); + let day5_result = day_5.solve(); + println!("Day 5 Part 2 Final Result: {}", day5_result); println!("-------------------------");