Begins work on day 2 problems, also adds the DataSet enum to separate the data set from the run mode
parent
7069e03132
commit
81b51a85e7
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day_2"
|
||||||
|
description = "Day 2 of the Advent of Code 2024"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
solver_base = { workspace = true }
|
||||||
|
utils = { workspace = true }
|
||||||
@ -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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,6 @@
|
|||||||
|
7 6 4 2 1
|
||||||
|
1 2 7 8 9
|
||||||
|
9 7 6 2 1
|
||||||
|
1 3 2 4 5
|
||||||
|
8 6 4 4 1
|
||||||
|
1 3 6 7 9
|
||||||
@ -0,0 +1,113 @@
|
|||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* @file day_2.rs
|
||||||
|
* @author Joey Pollack
|
||||||
|
* @date 2024/12/03 (y/m/d)
|
||||||
|
* @modified 2024/12/03 (y/m/d)
|
||||||
|
* @copyright Joseph R Pollack
|
||||||
|
* @brief Advent of Code 2024 day 2 problems
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
use crate::report::Report;
|
||||||
|
use ::solver_base::solver_base::{Solver, DataSet, RunMode};
|
||||||
|
use utils::utils;
|
||||||
|
|
||||||
|
pub struct Day2
|
||||||
|
{
|
||||||
|
data_set: DataSet,
|
||||||
|
run_mode: RunMode,
|
||||||
|
do_debug_prints: bool,
|
||||||
|
reports: Vec<Report>,
|
||||||
|
pub final_result: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
// DAY 2 IMPL
|
||||||
|
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
impl Day2
|
||||||
|
{
|
||||||
|
pub fn new() -> Day2
|
||||||
|
{
|
||||||
|
Day2 { data_set: DataSet::Test, run_mode: RunMode::FirstCase, do_debug_prints: false, reports: vec![], final_result: 0 }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve_first_case(self: &mut Self) -> String
|
||||||
|
{
|
||||||
|
// TODO: Day2::solve_first_case
|
||||||
|
|
||||||
|
self.final_result.to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve_second_case(self: &mut Self) -> String
|
||||||
|
{
|
||||||
|
// TODO: Day2::solve_second_case
|
||||||
|
|
||||||
|
self.final_result.to_string()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
// SOLVER TRAIT IMPL
|
||||||
|
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
impl Solver for Day2
|
||||||
|
{
|
||||||
|
fn print_test()
|
||||||
|
{
|
||||||
|
println!("DAY 2 TEST PRINT");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool)
|
||||||
|
{
|
||||||
|
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/test_input", dir),
|
||||||
|
DataSet::Full => format!("{}/data/input", dir),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
let data = utils::load_data(&data_filename);
|
||||||
|
for r in data.split("\n")
|
||||||
|
{
|
||||||
|
if self.do_debug_prints
|
||||||
|
{
|
||||||
|
println!("Raw report: {}", r);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut lvl_list: Vec<i32> = vec![];
|
||||||
|
for value in r.split(" ")
|
||||||
|
{
|
||||||
|
lvl_list.push(value.parse::<i32>().unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.do_debug_prints
|
||||||
|
{
|
||||||
|
println!("Processed report: {:#?}", lvl_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.reports.push(Report::new(lvl_list));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve(self: &mut Self) -> String
|
||||||
|
{
|
||||||
|
match self.run_mode
|
||||||
|
{
|
||||||
|
RunMode::FirstCase =>
|
||||||
|
{
|
||||||
|
self.solve_first_case()
|
||||||
|
},
|
||||||
|
|
||||||
|
RunMode::SecondCase =>
|
||||||
|
{
|
||||||
|
self.solve_second_case()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
pub mod day_2;
|
||||||
|
pub (crate) mod report;
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||||
|
pub enum Status
|
||||||
|
{
|
||||||
|
Safe,
|
||||||
|
Unsafe,
|
||||||
|
Unknown,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct Report
|
||||||
|
{
|
||||||
|
levels: Vec<i32>,
|
||||||
|
status: Status,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Report
|
||||||
|
{
|
||||||
|
pub fn new(lvls: Vec<i32>) -> Report
|
||||||
|
{
|
||||||
|
Report { levels: lvls , status: Status::Unknown }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn analyze(self: &mut Report) -> Status
|
||||||
|
{
|
||||||
|
// TODO: Report::analyze()
|
||||||
|
|
||||||
|
Status::Unknown
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day_3"
|
||||||
|
description = "Day 3 of the Advent of Code 2024"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
solver_base = { workspace = true }
|
||||||
|
utils = { workspace = true }
|
||||||
@ -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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* @file day_3.rs
|
||||||
|
* @author Joey Pollack
|
||||||
|
* @date 2024/12/03 (y/m/d)
|
||||||
|
* @modified 2024/12/03 (y/m/d)
|
||||||
|
* @copyright Joseph R Pollack
|
||||||
|
* @brief Advent of Code 2024 day 3 problems
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
use ::solver_base::solver_base::{Solver, DataSet, RunMode};
|
||||||
|
use utils::utils;
|
||||||
|
|
||||||
|
pub struct Day3
|
||||||
|
{
|
||||||
|
data_set: DataSet,
|
||||||
|
run_mode: RunMode,
|
||||||
|
do_debug_prints: bool,
|
||||||
|
pub final_result: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
// DAY 3 IMPL
|
||||||
|
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
impl Day3
|
||||||
|
{
|
||||||
|
pub fn new() -> Day3
|
||||||
|
{
|
||||||
|
Day3 { 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 Day3
|
||||||
|
{
|
||||||
|
fn print_test()
|
||||||
|
{
|
||||||
|
println!("DAY 3 TEST PRINT");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init(self: &mut Self, data_set: DataSet, run_mode: RunMode, enable_debug_prints: bool)
|
||||||
|
{
|
||||||
|
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/test_input", dir),
|
||||||
|
DataSet::Full => format!("{}/data/input", dir),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
let _data = utils::load_data(&data_filename);
|
||||||
|
|
||||||
|
// TODO: Day3::init
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve(self: &mut Self) -> String
|
||||||
|
{
|
||||||
|
match self.run_mode
|
||||||
|
{
|
||||||
|
RunMode::FirstCase =>
|
||||||
|
{
|
||||||
|
self.solve_first_case()
|
||||||
|
},
|
||||||
|
|
||||||
|
RunMode::SecondCase =>
|
||||||
|
{
|
||||||
|
self.solve_second_case()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
pub mod day_3;
|
||||||
@ -1,18 +1,34 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
* @file main.rs
|
||||||
|
* @author Joey Pollack
|
||||||
|
* @date 2024/12/03 (y/m/d)
|
||||||
|
* @modified 2024/12/03 (y/m/d)
|
||||||
|
* @copyright Joseph R Pollack
|
||||||
|
* @brief Advent of Code 2024 main file
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
use day_1::day_1::Day1;
|
use day_1::day_1::Day1;
|
||||||
use solver_base::solver_base::{Solver, RunMode};
|
use day_2::day_2::Day2;
|
||||||
|
use solver_base::solver_base::{Solver, DataSet, RunMode};
|
||||||
|
|
||||||
fn main()
|
fn main()
|
||||||
{
|
{
|
||||||
|
// DAY 1
|
||||||
let mut day_1 = Day1::new();
|
let mut day_1 = Day1::new();
|
||||||
day_1.init(RunMode::FirstCase, false);
|
day_1.init(DataSet::Full, RunMode::FirstCase, false);
|
||||||
let day1_result = day_1.solve();
|
let day1_result = day_1.solve();
|
||||||
println!("Day1 Part 1 Final Result: {}", day1_result);
|
println!("Day1 Part 1 Final Result: {}", day1_result);
|
||||||
|
|
||||||
let mut day_1 = Day1::new();
|
let mut day_1 = Day1::new();
|
||||||
day_1.init(RunMode::SecondCase, false);
|
day_1.init(DataSet::Full, RunMode::SecondCase, false);
|
||||||
let day1_result = day_1.solve();
|
let day1_result = day_1.solve();
|
||||||
println!("Day1 Part 2 Final Result: {}", day1_result);
|
println!("Day1 Part 2 Final Result: {}", day1_result);
|
||||||
|
|
||||||
|
|
||||||
|
// DAY 2
|
||||||
|
let mut day_2 = Day2::new();
|
||||||
|
day_2.init(DataSet::Full, RunMode::FirstCase, true);
|
||||||
|
let day2_result = day_2.solve();
|
||||||
|
println!("Day2 Part 1 Final Result: {}", day2_result);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue