diff --git a/Cargo.lock b/Cargo.lock index 40b84f8..70407a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,6 +12,7 @@ dependencies = [ "day_4", "day_5", "day_6", + "day_7", "solver_base", "utils", ] @@ -64,6 +65,14 @@ dependencies = [ "utils", ] +[[package]] +name = "day_7" +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 d7ded4f..8f508fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,8 @@ members = [ "crates/day_3", "crates/day_4", "crates/day_5", - "crates/day_6" + "crates/day_6", + "crates/day_7", ] [dependencies] @@ -25,6 +26,7 @@ day_3 = { workspace = true } day_4 = { workspace = true } day_5 = { workspace = true } day_6 = { workspace = true } +day_7 = { workspace = true } [workspace.dependencies] @@ -35,4 +37,5 @@ day_2 = { path = "crates/day_2" } day_3 = { path = "crates/day_3" } day_4 = { path = "crates/day_4" } day_5 = { path = "crates/day_5" } -day_6 = { path = "crates/day_6" } \ No newline at end of file +day_6 = { path = "crates/day_6" } +day_7 = { path = "crates/day_7" } \ No newline at end of file diff --git a/crates/day_7/Cargo.toml b/crates/day_7/Cargo.toml new file mode 100644 index 0000000..38c56a7 --- /dev/null +++ b/crates/day_7/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "day_7" +description = "Day 7 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_7/build.rs b/crates/day_7/build.rs new file mode 100644 index 0000000..4cd9495 --- /dev/null +++ b/crates/day_7/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_7/data/day7_input b/crates/day_7/data/day7_input new file mode 100644 index 0000000..e69de29 diff --git a/crates/day_7/data/day7_test_input b/crates/day_7/data/day7_test_input new file mode 100644 index 0000000..e69de29 diff --git a/crates/day_7/src/day_7.rs b/crates/day_7/src/day_7.rs new file mode 100644 index 0000000..2335917 --- /dev/null +++ b/crates/day_7/src/day_7.rs @@ -0,0 +1,93 @@ + +/****************************************************************************** +* @file day_7.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 7 problems +******************************************************************************/ + +use ::solver_base::solver_base::{Solver, DataSet, RunMode}; +use utils::utils; + +pub struct Day7 +{ + data_set: DataSet, + run_mode: RunMode, + do_debug_prints: bool, + pub final_result: i32, +} + +//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +// DAY 4 IMPL +//||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +impl Day7 +{ + pub fn new() -> Day7 + { + Day7 { 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 Day7 +{ + fn print_test() + { + println!("DAY 7 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/day7_test_input", dir), + DataSet::TestAlt => panic!("Day 7: There is no TestAlt input file!"), //format!("{}/data/day2_test_input", dir), + DataSet::Full => format!("{}/data/day7_input", dir), + }; + + let _data = utils::load_data(&data_filename); + + // TODO: Day7::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_7/src/lib.rs b/crates/day_7/src/lib.rs new file mode 100644 index 0000000..7716c2d --- /dev/null +++ b/crates/day_7/src/lib.rs @@ -0,0 +1,2 @@ + +pub mod day_7; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index f44db29..a3b1b53 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,7 @@ 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 day_6::day_6::Day6; use solver_base::solver_base::{Solver, DataSet, RunMode}; fn main() @@ -79,6 +80,17 @@ fn main() day_5.init(DataSet::Full, RunMode::SecondCase, false); let day5_result = day_5.solve(); println!("Day 5 Part 2 Final Result: {}", day5_result); + + // DAY 6 + let mut day_6 = Day6::new(); + day_6.init(DataSet::Full, RunMode::FirstCase, false); + let day6_result = day_6.solve(); + println!("Day 6 Part 1 Final Result: {}", day6_result); + + let mut day_6 = Day6::new(); + day_6.init(DataSet::Full, RunMode::SecondCase, false); + let day6_result = day_6.solve(); + println!("Day 6 Part 2 Final Result: {}", day6_result); println!("-------------------------");