From 1f6d97bcc8d02a5974e6bb934f6f9153a62b3ae4 Mon Sep 17 00:00:00 2001 From: Joey Pollack Date: Tue, 10 Dec 2024 14:59:28 -0500 Subject: [PATCH] Adds verbose print option to the solver --- crates/day_1/src/day_1.rs | 16 +++++++-- crates/day_2/src/day_2.rs | 14 ++++++-- crates/day_3/src/day_3.rs | 15 ++++++-- crates/day_4/src/day_4.rs | 14 ++++++-- crates/day_5/src/day_5.rs | 15 ++++++-- crates/day_6/src/day_6.rs | 51 ++++++++++++++++++++------- crates/day_7/src/day_7.rs | 12 +++++-- crates/solver_base/src/solver_base.rs | 3 +- src/main.rs | 24 ++++++------- 9 files changed, 125 insertions(+), 39 deletions(-) diff --git a/crates/day_1/src/day_1.rs b/crates/day_1/src/day_1.rs index 3d60944..561490e 100644 --- a/crates/day_1/src/day_1.rs +++ b/crates/day_1/src/day_1.rs @@ -16,6 +16,8 @@ pub struct Day1 data_set: DataSet, run_mode: RunMode, do_debug_prints: bool, + do_verbose_prints: bool, + data_a: Vec, data_b: Vec, distances: Vec, @@ -29,7 +31,16 @@ impl Day1 { pub fn new() -> Day1 { - Day1 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, data_a: vec![], data_b: vec![], distances: vec![], final_result: 0 } + Day1 { + data_set: DataSet::Test, + run_mode: RunMode::FirstCase, + do_debug_prints: false, + do_verbose_prints: false, + data_a: vec![], + data_b: vec![], + distances: vec![], + final_result: 0 + } } fn solve_first_case(self: &mut Self) -> String @@ -103,11 +114,12 @@ impl Solver for Day1 println!("DATA: {}", data); } - fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool) + fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool, enable_verbose_prints: bool) { self.data_set = data_set; self.run_mode = run_mode; self.do_debug_prints = enable_debug_prints; + self.do_verbose_prints = enable_verbose_prints; let dir = utils::get_working_dir(); let data_filename = diff --git a/crates/day_2/src/day_2.rs b/crates/day_2/src/day_2.rs index e5cdc4e..8a87114 100644 --- a/crates/day_2/src/day_2.rs +++ b/crates/day_2/src/day_2.rs @@ -17,6 +17,8 @@ pub struct Day2 data_set: DataSet, run_mode: RunMode, do_debug_prints: bool, + do_verbose_prints: bool, + reports: Vec, pub final_result: i32, } @@ -28,7 +30,14 @@ impl Day2 { pub fn new() -> Day2 { - Day2 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, reports: vec![], final_result: 0 } + Day2 { + data_set: DataSet::Test, + run_mode: RunMode::FirstCase, + do_debug_prints: false, + do_verbose_prints: false, + reports: vec![], + final_result: 0 + } } } @@ -42,11 +51,12 @@ impl Solver for Day2 println!("DAY 2 TEST PRINT"); } - fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool) + fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool, enable_verbose_prints: bool) { self.data_set = data_set; self.run_mode = run_mode; self.do_debug_prints = enable_debug_prints; + self.do_verbose_prints = enable_verbose_prints; let dir = utils::get_working_dir(); let data_filename = diff --git a/crates/day_3/src/day_3.rs b/crates/day_3/src/day_3.rs index d17e6b5..f86aab9 100644 --- a/crates/day_3/src/day_3.rs +++ b/crates/day_3/src/day_3.rs @@ -18,6 +18,8 @@ pub struct Day3 data_set: DataSet, run_mode: RunMode, do_debug_prints: bool, + do_verbose_prints: bool, + tokens: Vec, mul_ops: Vec, pub final_result: i32, @@ -30,7 +32,15 @@ impl Day3 { pub fn new() -> Day3 { - Day3 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, tokens: vec![], mul_ops: vec![], final_result: 0 } + Day3 { + data_set: DataSet::Test, + run_mode: RunMode::FirstCase, + do_debug_prints: false, + do_verbose_prints: false, + tokens: vec![], + mul_ops: vec![], + final_result: 0 + } } fn solve_first_case(self: &mut Self) -> String @@ -88,11 +98,12 @@ impl Solver for Day3 println!("DAY 3 TEST PRINT"); } - fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool) + fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool, enable_verbose_prints: bool) { self.data_set = data_set; self.run_mode = run_mode; self.do_debug_prints = enable_debug_prints; + self.do_verbose_prints = enable_verbose_prints; let dir = utils::get_working_dir(); let data_filename = diff --git a/crates/day_4/src/day_4.rs b/crates/day_4/src/day_4.rs index b73e9f4..5bf634f 100644 --- a/crates/day_4/src/day_4.rs +++ b/crates/day_4/src/day_4.rs @@ -17,6 +17,8 @@ pub struct Day4 data_set: DataSet, run_mode: RunMode, do_debug_prints: bool, + do_verbose_prints: bool, + word_grid: Option, pub final_result: i32, } @@ -28,7 +30,14 @@ impl Day4 { pub fn new() -> Day4 { - Day4 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, word_grid: None, final_result: 0 } + Day4 { + data_set: DataSet::Test, + run_mode: RunMode::FirstCase, + do_debug_prints: false, + do_verbose_prints: false, + word_grid: None, + final_result: 0 + } } fn solve_first_case(self: &mut Self) -> String @@ -62,11 +71,12 @@ impl Solver for Day4 println!("DAY 4 TEST PRINT"); } - fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool) + fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool, enable_verbose_prints: bool) { self.data_set = data_set; self.run_mode = run_mode; self.do_debug_prints = enable_debug_prints; + self.do_verbose_prints = enable_verbose_prints; let dir = utils::get_working_dir(); let data_filename = diff --git a/crates/day_5/src/day_5.rs b/crates/day_5/src/day_5.rs index 36db0dc..eda772b 100644 --- a/crates/day_5/src/day_5.rs +++ b/crates/day_5/src/day_5.rs @@ -16,6 +16,7 @@ pub struct Day5 data_set: DataSet, run_mode: RunMode, do_debug_prints: bool, + do_verbose_prints: bool, pub final_result: i32, rules: Vec, @@ -29,8 +30,15 @@ impl Day5 { pub fn new() -> Day5 { - Day5 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, - do_debug_prints: false, final_result: 0, rules: vec![], updates: vec![] } + Day5 { + data_set: DataSet::Test, + run_mode: RunMode::FirstCase, + do_debug_prints: false, + do_verbose_prints: false, + final_result: 0, + rules: vec![], + updates: vec![] + } } fn solve_first_case(self: &mut Self) -> String @@ -112,11 +120,12 @@ impl Solver for Day5 println!("DAY 5 TEST PRINT"); } - fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool) + fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool, enable_verbose_prints: bool) { self.data_set = data_set; self.run_mode = run_mode; self.do_debug_prints = enable_debug_prints; + self.do_verbose_prints = enable_verbose_prints; let dir = utils::get_working_dir(); let data_filename = diff --git a/crates/day_6/src/day_6.rs b/crates/day_6/src/day_6.rs index 4181883..e6225f7 100644 --- a/crates/day_6/src/day_6.rs +++ b/crates/day_6/src/day_6.rs @@ -19,6 +19,7 @@ pub struct Day6 data_set: DataSet, run_mode: RunMode, do_debug_prints: bool, + do_verbose_prints: bool, map: Map, guard_heatmap: Vec>, @@ -34,8 +35,17 @@ impl Day6 { pub fn new() -> Day6 { - Day6 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, - map: Map::new(), guard_heatmap: vec![], guard_position_history: vec![], step_iterations: 0, final_result: 0 } + Day6 { + data_set: DataSet::Test, + run_mode: RunMode::FirstCase, + do_debug_prints: false, + do_verbose_prints: false, + map: Map::new(), + guard_heatmap: vec![], + guard_position_history: vec![], + step_iterations: 0, + final_result: 0 + } } fn solve_first_case(self: &mut Self) -> String @@ -92,20 +102,31 @@ impl Day6 let stuck_limit = 10000; // 100,000 to double check -- 10,000 works! 1995 is the correct answer let mut found_locations: Vec = vec![]; - println!("Positions to test: {}", self.guard_position_history.len()); - println!("0%"); + if self.do_verbose_prints + { + println!("Positions to test: {}\nTesting...", self.guard_position_history.len()); + println!("0%"); + } for (i, pos) in self.guard_position_history.iter().enumerate() { - - if i == self.guard_position_history.len() / 4 + if self.do_verbose_prints { - println!("25%"); - } + if i == self.guard_position_history.len() / 4 + { + println!("25%"); + } - if i == self.guard_position_history.len() / 2 - { - println!("50%"); + if i == self.guard_position_history.len() / 2 + { + println!("50%"); + } + + let target = self.guard_position_history.len() / 2 + self.guard_position_history.len() / 4; + if i == target + { + println!("75%"); + } } self.map.reset_guard(); @@ -135,6 +156,11 @@ impl Day6 } } + if self.do_verbose_prints + { + println!("100%"); + } + self.final_result = found_locations.len() as i32; self.final_result.to_string() } @@ -151,11 +177,12 @@ impl Solver for Day6 println!("DAY 6 TEST PRINT"); } - fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool) + fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool, enable_verbose_prints: bool) { self.data_set = data_set; self.run_mode = run_mode; self.do_debug_prints = enable_debug_prints; + self.do_verbose_prints = enable_verbose_prints; let dir = utils::get_working_dir(); let data_filename = diff --git a/crates/day_7/src/day_7.rs b/crates/day_7/src/day_7.rs index 2335917..38503d9 100644 --- a/crates/day_7/src/day_7.rs +++ b/crates/day_7/src/day_7.rs @@ -16,6 +16,8 @@ pub struct Day7 data_set: DataSet, run_mode: RunMode, do_debug_prints: bool, + do_verbose_prints: bool, + pub final_result: i32, } @@ -26,7 +28,12 @@ impl Day7 { pub fn new() -> Day7 { - Day7 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, final_result: 0 } + Day7 { data_set: DataSet::Test, + run_mode: RunMode::FirstCase, + do_debug_prints: false, + do_verbose_prints: false, + final_result: 0 + } } fn solve_first_case(self: &mut Self) -> String @@ -53,11 +60,12 @@ impl Solver for Day7 println!("DAY 7 TEST PRINT"); } - fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool) + fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool, enable_verbose_prints: bool) { self.data_set = data_set; self.run_mode = run_mode; self.do_debug_prints = enable_debug_prints; + self.do_verbose_prints = enable_verbose_prints; let dir = utils::get_working_dir(); let data_filename = diff --git a/crates/solver_base/src/solver_base.rs b/crates/solver_base/src/solver_base.rs index ebc8769..507aa05 100644 --- a/crates/solver_base/src/solver_base.rs +++ b/crates/solver_base/src/solver_base.rs @@ -12,7 +12,6 @@ pub enum DataSet { Test, TestAlt, - //BALLS, Full, } @@ -25,6 +24,6 @@ pub trait Solver println!("SOLVER BASE PRINT TEST"); } - fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool); + fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool, enable_verbose_prints: bool); fn solve(self: &mut Self) -> String; } diff --git a/src/main.rs b/src/main.rs index 6dad444..b17c922 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,12 +19,12 @@ fn main() { // DAY 1 let mut day_1 = Day1::new(); - day_1.init(DataSet::Full, RunMode::FirstCase, false); + day_1.init(DataSet::Full, RunMode::FirstCase, false, false); let day1_result = day_1.solve(); println!("Day 1 Part 1 Final Result: {}", day1_result); let mut day_1 = Day1::new(); - day_1.init(DataSet::Full, RunMode::SecondCase, false); + day_1.init(DataSet::Full, RunMode::SecondCase, false, false); let day1_result = day_1.solve(); println!("Day 1 Part 2 Final Result: {}", day1_result); @@ -33,12 +33,12 @@ fn main() // DAY 2 let mut day_2 = Day2::new(); - day_2.init(DataSet::Full, RunMode::FirstCase, false); + day_2.init(DataSet::Full, RunMode::FirstCase, false, false); let day2_result = day_2.solve(); println!("Day 2 Part 1 Final Result: {}", day2_result); let mut day_2 = Day2::new(); - day_2.init(DataSet::Full, RunMode::SecondCase, false); + day_2.init(DataSet::Full, RunMode::SecondCase, false, false); let day2_result = day_2.solve(); println!("Day 2 Part 2 Final Result: {}", day2_result); @@ -46,12 +46,12 @@ fn main() // DAY 3 let mut day_3 = Day3::new(); - day_3.init(DataSet::Full, RunMode::FirstCase, false); + day_3.init(DataSet::Full, RunMode::FirstCase, false, false); let day3_result = day_3.solve(); println!("Day 3 Part 1 Final Result: {}", day3_result); let mut day_3 = Day3::new(); - day_3.init(DataSet::Full, RunMode::SecondCase, false); + day_3.init(DataSet::Full, RunMode::SecondCase, false, false); let day3_result = day_3.solve(); println!("Day 3 Part 2 Final Result: {}", day3_result); @@ -59,12 +59,12 @@ fn main() // DAY 4 let mut day_4 = Day4::new(); - day_4.init(DataSet::Full, RunMode::FirstCase, false); + day_4.init(DataSet::Full, RunMode::FirstCase, false, false); let day4_result = day_4.solve(); println!("Day 4 Part 1 Final Result: {}", day4_result); let mut day_4 = Day4::new(); - day_4.init(DataSet::Full, RunMode::SecondCase, false); + day_4.init(DataSet::Full, RunMode::SecondCase, false, false); let day4_result = day_4.solve(); println!("Day 4 Part 2 Final Result: {}", day4_result); @@ -72,12 +72,12 @@ fn main() // DAY 5 let mut day_5 = Day5::new(); - day_5.init(DataSet::Full, RunMode::FirstCase, false); + day_5.init(DataSet::Full, RunMode::FirstCase, false, 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::Full, RunMode::SecondCase, false); + day_5.init(DataSet::Full, RunMode::SecondCase, false, false); let day5_result = day_5.solve(); println!("Day 5 Part 2 Final Result: {}", day5_result); @@ -85,12 +85,12 @@ fn main() // DAY 6 let mut day_6 = Day6::new(); - day_6.init(DataSet::Full, RunMode::FirstCase, false); + day_6.init(DataSet::Full, RunMode::FirstCase, false, 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); + day_6.init(DataSet::Full, RunMode::SecondCase, false, true); let day6_result = day_6.solve(); println!("Day 6 Part 2 Final Result: {}", day6_result);