/****************************************************************************** * @file day_0.rs * @author Joey Pollack * @date 2025/11/20 (y/m/d) * @modified 2025/11/20 (y/m/d) * @copyright Joseph R Pollack (2025) * @brief pre-advent testing ******************************************************************************/ use solver::solver::{Solver, SolverState}; use utils::utils; pub struct Day0 { solver_state: SolverState, num_fib_values: i32, input: String, } impl Solver for Day0 { fn init(&mut self, _config: solver::solver::SolverState) -> Result<(), String> { self.solver_state = _config.clone(); self.num_fib_values = self.solver_state.get_value("num_fib_values").parse().expect("Could not parse num_fib_values"); self.input = utils::read_text_file("input/day_0_test_input"); return Ok(()) } fn solve(&mut self, _input: String) -> Result { println!("args are: {:#?}", self.solver_state); println!("input is: {}", self.input); let fibs = gen_fib_seq(self.num_fib_values, std::i64::MAX); // no max_val basically println!("fib nums:"); print_fibs(fibs); Ok(0) } fn name(&self) -> String { "Day 0".to_string() } } impl Day0 { pub fn new() -> Day0 { Day0 { solver_state: SolverState::new(), num_fib_values: 5, input: "".to_string() } } } // Helpers /// stop_after: the number of fib values to generate /// max_val: the maximum fib value to generate. Forces the function to /// return even if stop_after is not met. fn gen_fib_seq(stop_after: i32, max_val: i64) -> Vec { let mut a: i64 = 1; let mut b: i64 = 1; let mut nums: Vec = vec![]; nums.push(a); for _ in 0..stop_after -1 { nums.push(b); let t = b; b = a + b; a = t; if b >= max_val { break; } } nums } fn print_fibs(fibs: Vec) { for (i, f) in fibs.iter().enumerate() { println!("{}: {}", i + 1, f); } }