use crate::utils::{SolveError, SolveResult, Validated};
mod types;
mod core;
mod number;
pub use types::*;
pub use number::*;
pub fn solve(input_data: InputData) -> SolveResult {
if let Err(validation_err) = input_data.valid() {
return Err(SolveError(validation_err.into()));
}
let first_number = input_data.numbers.first().unwrap();
use ProblemSpec::*;
let answer = match input_data.spec {
FindNum(what) => core::find_num(&input_data.numbers, what),
Convert(base) => core::convert(first_number, base),
FindDigitsSum(base, what) => core::find_digits_sum(&input_data.numbers, base, what),
FindOnesCount(what) => core::find_ones_count(&input_data.numbers, what),
}?;
Ok(answer)
}