Adds verbose print option to the solver

master
Joey Pollack 1 year ago
parent 7f4dd970d5
commit 1f6d97bcc8

@ -16,6 +16,8 @@ pub struct Day1
data_set: DataSet, data_set: DataSet,
run_mode: RunMode, run_mode: RunMode,
do_debug_prints: bool, do_debug_prints: bool,
do_verbose_prints: bool,
data_a: Vec<i32>, data_a: Vec<i32>,
data_b: Vec<i32>, data_b: Vec<i32>,
distances: Vec<i32>, distances: Vec<i32>,
@ -29,7 +31,16 @@ impl Day1
{ {
pub fn new() -> 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 fn solve_first_case(self: &mut Self) -> String
@ -103,11 +114,12 @@ impl Solver for Day1
println!("DATA: {}", data); 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.data_set = data_set;
self.run_mode = run_mode; self.run_mode = run_mode;
self.do_debug_prints = enable_debug_prints; self.do_debug_prints = enable_debug_prints;
self.do_verbose_prints = enable_verbose_prints;
let dir = utils::get_working_dir(); let dir = utils::get_working_dir();
let data_filename = let data_filename =

@ -17,6 +17,8 @@ pub struct Day2
data_set: DataSet, data_set: DataSet,
run_mode: RunMode, run_mode: RunMode,
do_debug_prints: bool, do_debug_prints: bool,
do_verbose_prints: bool,
reports: Vec<Report>, reports: Vec<Report>,
pub final_result: i32, pub final_result: i32,
} }
@ -28,7 +30,14 @@ impl Day2
{ {
pub fn new() -> 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"); 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.data_set = data_set;
self.run_mode = run_mode; self.run_mode = run_mode;
self.do_debug_prints = enable_debug_prints; self.do_debug_prints = enable_debug_prints;
self.do_verbose_prints = enable_verbose_prints;
let dir = utils::get_working_dir(); let dir = utils::get_working_dir();
let data_filename = let data_filename =

@ -18,6 +18,8 @@ pub struct Day3
data_set: DataSet, data_set: DataSet,
run_mode: RunMode, run_mode: RunMode,
do_debug_prints: bool, do_debug_prints: bool,
do_verbose_prints: bool,
tokens: Vec<Token>, tokens: Vec<Token>,
mul_ops: Vec<Mul>, mul_ops: Vec<Mul>,
pub final_result: i32, pub final_result: i32,
@ -30,7 +32,15 @@ impl Day3
{ {
pub fn new() -> 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 fn solve_first_case(self: &mut Self) -> String
@ -88,11 +98,12 @@ impl Solver for Day3
println!("DAY 3 TEST PRINT"); 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.data_set = data_set;
self.run_mode = run_mode; self.run_mode = run_mode;
self.do_debug_prints = enable_debug_prints; self.do_debug_prints = enable_debug_prints;
self.do_verbose_prints = enable_verbose_prints;
let dir = utils::get_working_dir(); let dir = utils::get_working_dir();
let data_filename = let data_filename =

@ -17,6 +17,8 @@ pub struct Day4
data_set: DataSet, data_set: DataSet,
run_mode: RunMode, run_mode: RunMode,
do_debug_prints: bool, do_debug_prints: bool,
do_verbose_prints: bool,
word_grid: Option<WordGrid>, word_grid: Option<WordGrid>,
pub final_result: i32, pub final_result: i32,
} }
@ -28,7 +30,14 @@ impl Day4
{ {
pub fn new() -> 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 fn solve_first_case(self: &mut Self) -> String
@ -62,11 +71,12 @@ impl Solver for Day4
println!("DAY 4 TEST PRINT"); 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.data_set = data_set;
self.run_mode = run_mode; self.run_mode = run_mode;
self.do_debug_prints = enable_debug_prints; self.do_debug_prints = enable_debug_prints;
self.do_verbose_prints = enable_verbose_prints;
let dir = utils::get_working_dir(); let dir = utils::get_working_dir();
let data_filename = let data_filename =

@ -16,6 +16,7 @@ pub struct Day5
data_set: DataSet, data_set: DataSet,
run_mode: RunMode, run_mode: RunMode,
do_debug_prints: bool, do_debug_prints: bool,
do_verbose_prints: bool,
pub final_result: i32, pub final_result: i32,
rules: Vec<Rule>, rules: Vec<Rule>,
@ -29,8 +30,15 @@ impl Day5
{ {
pub fn new() -> Day5 pub fn new() -> Day5
{ {
Day5 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, Day5 {
do_debug_prints: false, final_result: 0, rules: vec![], updates: vec![] } 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 fn solve_first_case(self: &mut Self) -> String
@ -112,11 +120,12 @@ impl Solver for Day5
println!("DAY 5 TEST PRINT"); 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.data_set = data_set;
self.run_mode = run_mode; self.run_mode = run_mode;
self.do_debug_prints = enable_debug_prints; self.do_debug_prints = enable_debug_prints;
self.do_verbose_prints = enable_verbose_prints;
let dir = utils::get_working_dir(); let dir = utils::get_working_dir();
let data_filename = let data_filename =

@ -19,6 +19,7 @@ pub struct Day6
data_set: DataSet, data_set: DataSet,
run_mode: RunMode, run_mode: RunMode,
do_debug_prints: bool, do_debug_prints: bool,
do_verbose_prints: bool,
map: Map, map: Map,
guard_heatmap: Vec<Vec<bool>>, guard_heatmap: Vec<Vec<bool>>,
@ -34,8 +35,17 @@ impl Day6
{ {
pub fn new() -> Day6 pub fn new() -> Day6
{ {
Day6 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, Day6 {
map: Map::new(), guard_heatmap: vec![], guard_position_history: vec![], step_iterations: 0, final_result: 0 } 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 fn solve_first_case(self: &mut Self) -> String
@ -92,12 +102,16 @@ impl Day6
let stuck_limit = 10000; // 100,000 to double check -- 10,000 works! 1995 is the correct answer let stuck_limit = 10000; // 100,000 to double check -- 10,000 works! 1995 is the correct answer
let mut found_locations: Vec<I32Vec2> = vec![]; let mut found_locations: Vec<I32Vec2> = vec![];
println!("Positions to test: {}", self.guard_position_history.len()); if self.do_verbose_prints
{
println!("Positions to test: {}\nTesting...", self.guard_position_history.len());
println!("0%"); println!("0%");
}
for (i, pos) in self.guard_position_history.iter().enumerate() for (i, pos) in self.guard_position_history.iter().enumerate()
{ {
if self.do_verbose_prints
{
if i == self.guard_position_history.len() / 4 if i == self.guard_position_history.len() / 4
{ {
println!("25%"); println!("25%");
@ -108,6 +122,13 @@ impl Day6
println!("50%"); 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(); self.map.reset_guard();
self.map.clear_visited(); self.map.clear_visited();
let mut iterations = 0; let mut iterations = 0;
@ -135,6 +156,11 @@ impl Day6
} }
} }
if self.do_verbose_prints
{
println!("100%");
}
self.final_result = found_locations.len() as i32; self.final_result = found_locations.len() as i32;
self.final_result.to_string() self.final_result.to_string()
} }
@ -151,11 +177,12 @@ impl Solver for Day6
println!("DAY 6 TEST PRINT"); 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.data_set = data_set;
self.run_mode = run_mode; self.run_mode = run_mode;
self.do_debug_prints = enable_debug_prints; self.do_debug_prints = enable_debug_prints;
self.do_verbose_prints = enable_verbose_prints;
let dir = utils::get_working_dir(); let dir = utils::get_working_dir();
let data_filename = let data_filename =

@ -16,6 +16,8 @@ pub struct Day7
data_set: DataSet, data_set: DataSet,
run_mode: RunMode, run_mode: RunMode,
do_debug_prints: bool, do_debug_prints: bool,
do_verbose_prints: bool,
pub final_result: i32, pub final_result: i32,
} }
@ -26,7 +28,12 @@ impl Day7
{ {
pub fn new() -> 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 fn solve_first_case(self: &mut Self) -> String
@ -53,11 +60,12 @@ impl Solver for Day7
println!("DAY 7 TEST PRINT"); 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.data_set = data_set;
self.run_mode = run_mode; self.run_mode = run_mode;
self.do_debug_prints = enable_debug_prints; self.do_debug_prints = enable_debug_prints;
self.do_verbose_prints = enable_verbose_prints;
let dir = utils::get_working_dir(); let dir = utils::get_working_dir();
let data_filename = let data_filename =

@ -12,7 +12,6 @@ pub enum DataSet
{ {
Test, Test,
TestAlt, TestAlt,
//BALLS,
Full, Full,
} }
@ -25,6 +24,6 @@ pub trait Solver
println!("SOLVER BASE PRINT TEST"); 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; fn solve(self: &mut Self) -> String;
} }

@ -19,12 +19,12 @@ fn main()
{ {
// DAY 1 // DAY 1
let mut day_1 = Day1::new(); 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(); let day1_result = day_1.solve();
println!("Day 1 Part 1 Final Result: {}", day1_result); println!("Day 1 Part 1 Final Result: {}", day1_result);
let mut day_1 = Day1::new(); 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(); let day1_result = day_1.solve();
println!("Day 1 Part 2 Final Result: {}", day1_result); println!("Day 1 Part 2 Final Result: {}", day1_result);
@ -33,12 +33,12 @@ fn main()
// DAY 2 // DAY 2
let mut day_2 = Day2::new(); 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(); let day2_result = day_2.solve();
println!("Day 2 Part 1 Final Result: {}", day2_result); println!("Day 2 Part 1 Final Result: {}", day2_result);
let mut day_2 = Day2::new(); 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(); let day2_result = day_2.solve();
println!("Day 2 Part 2 Final Result: {}", day2_result); println!("Day 2 Part 2 Final Result: {}", day2_result);
@ -46,12 +46,12 @@ fn main()
// DAY 3 // DAY 3
let mut day_3 = Day3::new(); 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(); let day3_result = day_3.solve();
println!("Day 3 Part 1 Final Result: {}", day3_result); println!("Day 3 Part 1 Final Result: {}", day3_result);
let mut day_3 = Day3::new(); 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(); let day3_result = day_3.solve();
println!("Day 3 Part 2 Final Result: {}", day3_result); println!("Day 3 Part 2 Final Result: {}", day3_result);
@ -59,12 +59,12 @@ fn main()
// DAY 4 // DAY 4
let mut day_4 = Day4::new(); 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(); let day4_result = day_4.solve();
println!("Day 4 Part 1 Final Result: {}", day4_result); println!("Day 4 Part 1 Final Result: {}", day4_result);
let mut day_4 = Day4::new(); 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(); let day4_result = day_4.solve();
println!("Day 4 Part 2 Final Result: {}", day4_result); println!("Day 4 Part 2 Final Result: {}", day4_result);
@ -72,12 +72,12 @@ fn main()
// DAY 5 // DAY 5
let mut day_5 = Day5::new(); 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(); let day5_result = day_5.solve();
println!("Day 5 Part 1 Final Result: {}", day5_result); println!("Day 5 Part 1 Final Result: {}", day5_result);
let mut day_5 = Day5::new(); 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(); let day5_result = day_5.solve();
println!("Day 5 Part 2 Final Result: {}", day5_result); println!("Day 5 Part 2 Final Result: {}", day5_result);
@ -85,12 +85,12 @@ fn main()
// DAY 6 // DAY 6
let mut day_6 = Day6::new(); 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(); let day6_result = day_6.solve();
println!("Day 6 Part 1 Final Result: {}", day6_result); println!("Day 6 Part 1 Final Result: {}", day6_result);
let mut day_6 = Day6::new(); 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(); let day6_result = day_6.solve();
println!("Day 6 Part 2 Final Result: {}", day6_result); println!("Day 6 Part 2 Final Result: {}", day6_result);

Loading…
Cancel
Save