diff --git a/aoclp/src/cache.rs b/aoclp/src/cache.rs new file mode 100644 index 0000000..0715bc1 --- /dev/null +++ b/aoclp/src/cache.rs @@ -0,0 +1,117 @@ +use std::env; +use std::env::VarError; +use std::error::Error; +use std::fs::{create_dir_all, read_to_string, rename, write}; +use std::path::PathBuf; +use std::str::FromStr; + +use crate::anyhow::Context; + +#[derive(Debug)] +pub struct DiskCache { + path: PathBuf, +} + +const CACHE_PATH_ENV_VAR: &str = "AOCLP_CACHE_PATH"; +const DEFAULT_CACHE_PATH: &str = ".aoclp"; + +const CACHE_FILE_EXT: &str = ".txt"; +const CACHE_FILE_TMP_EXT: &str = ".txt.tmp"; +const CACHE_FILE_PC_EXT: &str = ".txt.pc"; + +impl DiskCache { + pub fn new() -> crate::Result { + let path: PathBuf = match env::var(CACHE_PATH_ENV_VAR) { + Ok(path) => path.into(), + Err(VarError::NotPresent) => DEFAULT_CACHE_PATH.into(), + Err(err) => { + return Err(err).with_context(|| "failed to get cache path from environment"); + }, + }; + let path = path + .canonicalize() + .with_context(|| "failed to get absolute cache path")?; + create_dir_all(&path).with_context(|| "failed to create cache directory")?; + + Ok(Self { path }) + } + + pub fn get(&self, key: K) -> crate::Result> + where + K: AsRef, + T: FromStr, + ::Err: Error + Send + Sync + 'static, + { + let file_path = self.path_for(key.as_ref(), CACHE_FILE_EXT); + let pc_file_path = self.path_for(key.as_ref(), CACHE_FILE_PC_EXT); + if pc_file_path.is_file() { + rename(&pc_file_path, &file_path).with_context(|| { + format!( + "failed to rename pre-commit cache file for key '{}' from '{}' to '{}", + key.as_ref(), + pc_file_path.display(), + file_path.display(), + ) + })?; + } + + if !file_path.is_file() { + return Ok(None); + } + + Ok(Some( + read_to_string(file_path) + .with_context(|| format!("failed to read cache file for key '{}'", key.as_ref()))? + .parse() + .with_context(|| { + format!("failed to parse cache file for key '{}'", key.as_ref()) + })?, + )) + } + + pub fn set(&self, key: K, value: T) -> crate::Result<()> + where + K: AsRef, + T: TryInto, + >::Error: Error + Send + Sync + 'static, + { + let data = value.try_into().with_context(|| { + format!("failed to convert cache value for key '{}' to string", key.as_ref()) + })?; + + let tmp_file_path = self.path_for(key.as_ref(), CACHE_FILE_TMP_EXT); + write(&tmp_file_path, data).with_context(|| { + format!( + "failed to write cache file for key '{}' to '{}", + key.as_ref(), + tmp_file_path.display(), + ) + })?; + + let pc_file_path = self.path_for(key.as_ref(), CACHE_FILE_PC_EXT); + rename(&tmp_file_path, &pc_file_path).with_context(|| { + format!( + "failed to rename temp cache file for key '{}' from '{}' to '{}", + key.as_ref(), + tmp_file_path.display(), + pc_file_path.display(), + ) + })?; + + let file_path = self.path_for(key.as_ref(), CACHE_FILE_EXT); + rename(&pc_file_path, &file_path).with_context(|| { + format!( + "failed to rename pre-commit cache file for key '{}' from '{}' to '{}", + key.as_ref(), + tmp_file_path.display(), + file_path.display(), + ) + })?; + + Ok(()) + } + + fn path_for(&self, key: &str, ext: &str) -> PathBuf { + self.path.join(key).with_added_extension(ext) + } +} diff --git a/aoclp/src/lib.rs b/aoclp/src/lib.rs index 0b1dbeb..c0362c9 100644 --- a/aoclp/src/lib.rs +++ b/aoclp/src/lib.rs @@ -1,12 +1,13 @@ //! Helper library for Advent of Code. +pub mod cache; pub mod captures; pub mod forth; pub mod functional; pub mod looping; pub mod mapping; pub mod positioning; -pub mod solvers_impl; +pub mod solvers; pub mod str; pub type Error = anyhow::Error; diff --git a/aoclp/src/solvers.rs b/aoclp/src/solvers.rs new file mode 100644 index 0000000..7da8f70 --- /dev/null +++ b/aoclp/src/solvers.rs @@ -0,0 +1,2 @@ +pub mod build; +pub mod input; diff --git a/aoclp/src/solvers_impl/solvers.rs b/aoclp/src/solvers/build.rs similarity index 92% rename from aoclp/src/solvers_impl/solvers.rs rename to aoclp/src/solvers/build.rs index 3dfc2ed..4eac211 100644 --- a/aoclp/src/solvers_impl/solvers.rs +++ b/aoclp/src/solvers/build.rs @@ -13,8 +13,8 @@ macro_rules! build_solvers { }; ( $fn_name:ident, $({ $year:literal, [$($day:literal),+] }),+ ) => { $crate::paste::paste! { - pub fn $fn_name() -> $crate::solvers_impl::solvers::Solvers { - let mut solvers = $crate::solvers_impl::solvers::Solvers::default(); + pub fn $fn_name() -> $crate::solvers::build::Solvers { + let mut solvers = $crate::solvers::build::Solvers::default(); $( $( solvers.push_day($year, []::[]::part_1, []::[]::part_2); diff --git a/aoclp/src/solvers_impl/input.rs b/aoclp/src/solvers/input.rs similarity index 100% rename from aoclp/src/solvers_impl/input.rs rename to aoclp/src/solvers/input.rs diff --git a/aoclp/src/solvers_impl.rs b/aoclp/src/solvers_impl.rs deleted file mode 100644 index 1d21747..0000000 --- a/aoclp/src/solvers_impl.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod input; -pub mod solvers; diff --git a/aoclp_solutions/src/main.rs b/aoclp_solutions/src/main.rs index 6e8a579..34174f7 100644 --- a/aoclp_solutions/src/main.rs +++ b/aoclp_solutions/src/main.rs @@ -1,6 +1,6 @@ use std::time::Instant; -use aoclp::solvers_impl::solvers::Solvers; +use aoclp::solvers::build::Solvers; use aoclp_solutions::solvers; use clap::Parser; diff --git a/aoclp_solutions/src/y2017/day_01.rs b/aoclp_solutions/src/y2017/day_01.rs index bf271ea..8e77f90 100644 --- a/aoclp_solutions/src/y2017/day_01.rs +++ b/aoclp_solutions/src/y2017/day_01.rs @@ -1,4 +1,4 @@ -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; pub fn part_1() -> u32 { sum(&input(), 1) diff --git a/aoclp_solutions/src/y2017/day_02.rs b/aoclp_solutions/src/y2017/day_02.rs index 20905dc..b71b0b6 100644 --- a/aoclp_solutions/src/y2017/day_02.rs +++ b/aoclp_solutions/src/y2017/day_02.rs @@ -1,4 +1,4 @@ -use aoclp::solvers_impl::input::safe_get_input_as_many_vecs; +use aoclp::solvers::input::safe_get_input_as_many_vecs; use itertools::Itertools; pub fn part_1() -> i32 { diff --git a/aoclp_solutions/src/y2017/day_03.rs b/aoclp_solutions/src/y2017/day_03.rs index b5b58a3..0fcba0c 100644 --- a/aoclp_solutions/src/y2017/day_03.rs +++ b/aoclp_solutions/src/y2017/day_03.rs @@ -5,7 +5,7 @@ use aoclp::num::{Zero, zero}; use aoclp::positioning::direction::four_points::Direction4; use aoclp::positioning::direction::{Direction, MovementDirection}; use aoclp::positioning::pt::{Pt, manhattan}; -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; use itertools::Itertools; pub fn part_1() -> i64 { diff --git a/aoclp_solutions/src/y2017/day_04.rs b/aoclp_solutions/src/y2017/day_04.rs index 58d93c9..b195e2a 100644 --- a/aoclp_solutions/src/y2017/day_04.rs +++ b/aoclp_solutions/src/y2017/day_04.rs @@ -1,4 +1,4 @@ -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2017/day_05.rs b/aoclp_solutions/src/y2017/day_05.rs index 16e914f..5fa771a 100644 --- a/aoclp_solutions/src/y2017/day_05.rs +++ b/aoclp_solutions/src/y2017/day_05.rs @@ -1,6 +1,6 @@ use std::iter::successors; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; pub fn part_1() -> usize { steps(false) diff --git a/aoclp_solutions/src/y2017/day_06.rs b/aoclp_solutions/src/y2017/day_06.rs index 88da5f0..5514c35 100644 --- a/aoclp_solutions/src/y2017/day_06.rs +++ b/aoclp_solutions/src/y2017/day_06.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use aoclp::solvers_impl::input::safe_get_input_as_one_vec; +use aoclp::solvers::input::safe_get_input_as_one_vec; pub fn part_1() -> usize { realloc_loop().cycles() diff --git a/aoclp_solutions/src/y2017/day_07.rs b/aoclp_solutions/src/y2017/day_07.rs index ac00ce9..ccd02c5 100644 --- a/aoclp_solutions/src/y2017/day_07.rs +++ b/aoclp_solutions/src/y2017/day_07.rs @@ -7,7 +7,7 @@ use std::sync::OnceLock; use aoclp::captures::CapturesHelper; use aoclp::regex::Regex; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> String { diff --git a/aoclp_solutions/src/y2017/day_08.rs b/aoclp_solutions/src/y2017/day_08.rs index cd5bdc9..f9487e0 100644 --- a/aoclp_solutions/src/y2017/day_08.rs +++ b/aoclp_solutions/src/y2017/day_08.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use std::str::FromStr; use aoclp::anyhow::anyhow; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> i64 { diff --git a/aoclp_solutions/src/y2017/day_09.rs b/aoclp_solutions/src/y2017/day_09.rs index 08d6d2f..551026d 100644 --- a/aoclp_solutions/src/y2017/day_09.rs +++ b/aoclp_solutions/src/y2017/day_09.rs @@ -1,4 +1,4 @@ -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; pub fn part_1() -> usize { Group::root().total_score() diff --git a/aoclp_solutions/src/y2017/day_10.rs b/aoclp_solutions/src/y2017/day_10.rs index 0a20a04..cfd1b9b 100644 --- a/aoclp_solutions/src/y2017/day_10.rs +++ b/aoclp_solutions/src/y2017/day_10.rs @@ -1,6 +1,6 @@ use std::ops::Mul; -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; use crate::y2017::helpers::knot_hash::KnotHash; diff --git a/aoclp_solutions/src/y2017/day_11.rs b/aoclp_solutions/src/y2017/day_11.rs index 995fe09..11e820d 100644 --- a/aoclp_solutions/src/y2017/day_11.rs +++ b/aoclp_solutions/src/y2017/day_11.rs @@ -2,7 +2,7 @@ use std::iter::successors; use aoclp::num::zero; use aoclp::positioning::pt::{Pt, manhattan}; -use aoclp::solvers_impl::input::safe_get_input_as_one_vec; +use aoclp::solvers::input::safe_get_input_as_one_vec; use gratte::EnumString; use itertools::Itertools; diff --git a/aoclp_solutions/src/y2017/day_12.rs b/aoclp_solutions/src/y2017/day_12.rs index dd75a14..affe10a 100644 --- a/aoclp_solutions/src/y2017/day_12.rs +++ b/aoclp_solutions/src/y2017/day_12.rs @@ -1,7 +1,7 @@ use std::collections::{HashMap, HashSet}; use std::str::FromStr; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2017/day_13.rs b/aoclp_solutions/src/y2017/day_13.rs index 1eb4148..d200d99 100644 --- a/aoclp_solutions/src/y2017/day_13.rs +++ b/aoclp_solutions/src/y2017/day_13.rs @@ -1,4 +1,4 @@ -use aoclp::solvers_impl::input::safe_get_input_as_many_pairs; +use aoclp::solvers::input::safe_get_input_as_many_pairs; pub fn part_1() -> usize { input() diff --git a/aoclp_solutions/src/y2017/day_14.rs b/aoclp_solutions/src/y2017/day_14.rs index 3f73ed3..9ad5504 100644 --- a/aoclp_solutions/src/y2017/day_14.rs +++ b/aoclp_solutions/src/y2017/day_14.rs @@ -1,7 +1,7 @@ use std::collections::HashSet; use aoclp::positioning::pt::Pt; -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; use crate::y2017::helpers::knot_hash::KnotHash; diff --git a/aoclp_solutions/src/y2017/day_15.rs b/aoclp_solutions/src/y2017/day_15.rs index c3076b2..9e03254 100644 --- a/aoclp_solutions/src/y2017/day_15.rs +++ b/aoclp_solutions/src/y2017/day_15.rs @@ -1,7 +1,7 @@ use std::iter::successors; use std::str::FromStr; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2017/day_16.rs b/aoclp_solutions/src/y2017/day_16.rs index c9dfa3f..407ce34 100644 --- a/aoclp_solutions/src/y2017/day_16.rs +++ b/aoclp_solutions/src/y2017/day_16.rs @@ -3,7 +3,7 @@ use std::str::FromStr; use aoclp::anyhow::{Context, anyhow}; use aoclp::looping::LoopingItertools; -use aoclp::solvers_impl::input::safe_get_input_as_one_vec; +use aoclp::solvers::input::safe_get_input_as_one_vec; use itertools::Itertools; pub fn part_1() -> String { diff --git a/aoclp_solutions/src/y2017/day_17.rs b/aoclp_solutions/src/y2017/day_17.rs index 4d711b3..2b79abd 100644 --- a/aoclp_solutions/src/y2017/day_17.rs +++ b/aoclp_solutions/src/y2017/day_17.rs @@ -1,4 +1,4 @@ -use aoclp::solvers_impl::input::safe_get_input_as; +use aoclp::solvers::input::safe_get_input_as; pub fn part_1() -> usize { let mut spinlock = Spinlock::default(); diff --git a/aoclp_solutions/src/y2017/day_18.rs b/aoclp_solutions/src/y2017/day_18.rs index 09657af..403f909 100644 --- a/aoclp_solutions/src/y2017/day_18.rs +++ b/aoclp_solutions/src/y2017/day_18.rs @@ -3,7 +3,7 @@ use std::rc::Rc; use std::str::FromStr; use aoclp::anyhow::{Context, anyhow}; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use crate::y2017::helpers::duet::{Queue, Registers, Value, read_register, read_value}; diff --git a/aoclp_solutions/src/y2017/day_19.rs b/aoclp_solutions/src/y2017/day_19.rs index cdf60d1..77bd36f 100644 --- a/aoclp_solutions/src/y2017/day_19.rs +++ b/aoclp_solutions/src/y2017/day_19.rs @@ -3,7 +3,7 @@ use std::iter::successors; use aoclp::positioning::direction::four_points::Direction4; use aoclp::positioning::pt::Pt; use aoclp::positioning::turtle::Turtle; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; pub fn part_1() -> String { packet().filter_map(|(_, c)| c.map(char::from)).collect() diff --git a/aoclp_solutions/src/y2017/day_20.rs b/aoclp_solutions/src/y2017/day_20.rs index 7cc11d3..4625726 100644 --- a/aoclp_solutions/src/y2017/day_20.rs +++ b/aoclp_solutions/src/y2017/day_20.rs @@ -8,7 +8,7 @@ use aoclp::captures::CapturesHelper; use aoclp::num::zero; use aoclp::positioning::pt_3d::{Pt3d, manhattan}; use aoclp::regex::Regex; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2017/day_21.rs b/aoclp_solutions/src/y2017/day_21.rs index 84ffffb..c8d3081 100644 --- a/aoclp_solutions/src/y2017/day_21.rs +++ b/aoclp_solutions/src/y2017/day_21.rs @@ -4,7 +4,7 @@ use std::fmt::{Display, Formatter}; use std::iter::successors; use std::str::FromStr; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2017/day_22.rs b/aoclp_solutions/src/y2017/day_22.rs index 00283a2..ea13a6f 100644 --- a/aoclp_solutions/src/y2017/day_22.rs +++ b/aoclp_solutions/src/y2017/day_22.rs @@ -1,7 +1,7 @@ use aoclp::positioning::direction::four_points::Direction4; use aoclp::positioning::pt::Pt; use aoclp::positioning::turtle::Turtle; -use aoclp::solvers_impl::input::safe_get_input_as_terrain; +use aoclp::solvers::input::safe_get_input_as_terrain; use gratte::{EnumCount, FromRepr}; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2017/day_23.rs b/aoclp_solutions/src/y2017/day_23.rs index 36184fe..a722d0e 100644 --- a/aoclp_solutions/src/y2017/day_23.rs +++ b/aoclp_solutions/src/y2017/day_23.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use std::str::FromStr; use aoclp::anyhow::{Context, anyhow}; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use gratte::EnumDiscriminants; use itertools::Itertools; use primes::is_prime; diff --git a/aoclp_solutions/src/y2017/day_24.rs b/aoclp_solutions/src/y2017/day_24.rs index 894067c..f931b7a 100644 --- a/aoclp_solutions/src/y2017/day_24.rs +++ b/aoclp_solutions/src/y2017/day_24.rs @@ -1,7 +1,7 @@ use std::convert::Infallible; use std::str::FromStr; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2017/day_25.rs b/aoclp_solutions/src/y2017/day_25.rs index 23c19e6..2d2a99c 100644 --- a/aoclp_solutions/src/y2017/day_25.rs +++ b/aoclp_solutions/src/y2017/day_25.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use std::rc::Rc; -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; use bit_vec::BitVec; use gratte::EnumString; use itertools::Itertools; diff --git a/aoclp_solutions/src/y2024/day_01.rs b/aoclp_solutions/src/y2024/day_01.rs index e628d79..c028d99 100644 --- a/aoclp_solutions/src/y2024/day_01.rs +++ b/aoclp_solutions/src/y2024/day_01.rs @@ -1,4 +1,4 @@ -use aoclp::solvers_impl::input::safe_get_input_as_many_pairs; +use aoclp::solvers::input::safe_get_input_as_many_pairs; use itertools::Itertools; pub fn part_1() -> i64 { diff --git a/aoclp_solutions/src/y2024/day_02.rs b/aoclp_solutions/src/y2024/day_02.rs index 69ec1c8..1ed8cc9 100644 --- a/aoclp_solutions/src/y2024/day_02.rs +++ b/aoclp_solutions/src/y2024/day_02.rs @@ -1,4 +1,4 @@ -use aoclp::solvers_impl::input::safe_get_input_as_many_vecs; +use aoclp::solvers::input::safe_get_input_as_many_vecs; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2024/day_03.rs b/aoclp_solutions/src/y2024/day_03.rs index ea88b9e..0eeda94 100644 --- a/aoclp_solutions/src/y2024/day_03.rs +++ b/aoclp_solutions/src/y2024/day_03.rs @@ -1,6 +1,6 @@ use aoclp::captures::CapturesHelper; use aoclp::regex::Regex; -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; pub fn part_1() -> i64 { sum_of_muls(false) diff --git a/aoclp_solutions/src/y2024/day_04.rs b/aoclp_solutions/src/y2024/day_04.rs index 492addf..8f7beec 100644 --- a/aoclp_solutions/src/y2024/day_04.rs +++ b/aoclp_solutions/src/y2024/day_04.rs @@ -3,7 +3,7 @@ use std::iter::successors; use aoclp::positioning::direction::eight_points::Direction8; use aoclp::positioning::pt::{Pt, matrix_to_map}; -use aoclp::solvers_impl::input::safe_get_input_as_terrain; +use aoclp::solvers::input::safe_get_input_as_terrain; use gratte::IntoEnumIterator; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2024/day_05.rs b/aoclp_solutions/src/y2024/day_05.rs index a37111e..7f62b3c 100644 --- a/aoclp_solutions/src/y2024/day_05.rs +++ b/aoclp_solutions/src/y2024/day_05.rs @@ -1,6 +1,6 @@ use std::cmp::Ordering; -use aoclp::solvers_impl::input::safe_get_input_as_many_vecs_of_two_types; +use aoclp::solvers::input::safe_get_input_as_many_vecs_of_two_types; use itertools::Itertools; pub fn part_1() -> u64 { diff --git a/aoclp_solutions/src/y2024/day_06.rs b/aoclp_solutions/src/y2024/day_06.rs index 826a8cc..70b0f84 100644 --- a/aoclp_solutions/src/y2024/day_06.rs +++ b/aoclp_solutions/src/y2024/day_06.rs @@ -7,7 +7,7 @@ use aoclp::looping::LoopingItertools; use aoclp::positioning::direction::four_points::Direction4; use aoclp::positioning::pt::Pt; use aoclp::positioning::turtle::Turtle; -use aoclp::solvers_impl::input::safe_get_input_as_terrain; +use aoclp::solvers::input::safe_get_input_as_terrain; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2024/day_07.rs b/aoclp_solutions/src/y2024/day_07.rs index 9c99bf4..fdfc840 100644 --- a/aoclp_solutions/src/y2024/day_07.rs +++ b/aoclp_solutions/src/y2024/day_07.rs @@ -1,7 +1,7 @@ use std::iter::once; use aoclp::forth::Forth; -use aoclp::solvers_impl::input::safe_get_input_as_many_vecs; +use aoclp::solvers::input::safe_get_input_as_many_vecs; use itertools::{Itertools, repeat_n}; pub fn part_1() -> i64 { diff --git a/aoclp_solutions/src/y2024/day_08.rs b/aoclp_solutions/src/y2024/day_08.rs index 0ae9a2b..fc90bd7 100644 --- a/aoclp_solutions/src/y2024/day_08.rs +++ b/aoclp_solutions/src/y2024/day_08.rs @@ -3,7 +3,7 @@ use std::iter::successors; use std::ops::Range; use aoclp::positioning::pt::{Pt, matrix_to_map}; -use aoclp::solvers_impl::input::safe_get_input_as_terrain; +use aoclp::solvers::input::safe_get_input_as_terrain; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2024/day_09.rs b/aoclp_solutions/src/y2024/day_09.rs index 702e8ff..18d4a55 100644 --- a/aoclp_solutions/src/y2024/day_09.rs +++ b/aoclp_solutions/src/y2024/day_09.rs @@ -1,4 +1,4 @@ -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; use gratte::{EnumCount, EnumIs, FromRepr}; use itertools::repeat_n; diff --git a/aoclp_solutions/src/y2024/day_10.rs b/aoclp_solutions/src/y2024/day_10.rs index 14fa537..ac9087e 100644 --- a/aoclp_solutions/src/y2024/day_10.rs +++ b/aoclp_solutions/src/y2024/day_10.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use aoclp::mapping::dij; use aoclp::positioning::pt::{Pt, matrix_to_map}; -use aoclp::solvers_impl::input::safe_get_input_as_terrain; +use aoclp::solvers::input::safe_get_input_as_terrain; pub fn part_1() -> usize { Map::default().trailheads().map(|h| h.score).sum() diff --git a/aoclp_solutions/src/y2025/day_01.rs b/aoclp_solutions/src/y2025/day_01.rs index 665884d..4294023 100644 --- a/aoclp_solutions/src/y2025/day_01.rs +++ b/aoclp_solutions/src/y2025/day_01.rs @@ -2,7 +2,7 @@ use std::iter::{once, successors}; use std::str::FromStr; use aoclp::anyhow::anyhow; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use aoclp::str::StrHelper; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2025/day_02.rs b/aoclp_solutions/src/y2025/day_02.rs index 627eaf3..a2ddd19 100644 --- a/aoclp_solutions/src/y2025/day_02.rs +++ b/aoclp_solutions/src/y2025/day_02.rs @@ -3,7 +3,7 @@ use std::str::FromStr; use aoclp::functional::ConsumingPredHelper; use aoclp::num::Integer; -use aoclp::solvers_impl::input::safe_get_input_as_one_vec; +use aoclp::solvers::input::safe_get_input_as_one_vec; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2025/day_03.rs b/aoclp_solutions/src/y2025/day_03.rs index 2977ae6..bae5716 100644 --- a/aoclp_solutions/src/y2025/day_03.rs +++ b/aoclp_solutions/src/y2025/day_03.rs @@ -1,7 +1,7 @@ use std::str::FromStr; use aoclp::anyhow::anyhow; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> u64 { diff --git a/aoclp_solutions/src/y2025/day_04.rs b/aoclp_solutions/src/y2025/day_04.rs index 2a34640..346c01a 100644 --- a/aoclp_solutions/src/y2025/day_04.rs +++ b/aoclp_solutions/src/y2025/day_04.rs @@ -1,7 +1,7 @@ use std::collections::{BTreeSet, HashSet}; use aoclp::positioning::pt::{Pt, filtered_matrix_to_map}; -use aoclp::solvers_impl::input::safe_get_input_as_terrain; +use aoclp::solvers::input::safe_get_input_as_terrain; pub fn part_1() -> usize { let rolls: HashSet = filtered_matrix_to_map(input(), |_, c| *c != '.') diff --git a/aoclp_solutions/src/y2025/day_05.rs b/aoclp_solutions/src/y2025/day_05.rs index b9a6aa6..8158fb4 100644 --- a/aoclp_solutions/src/y2025/day_05.rs +++ b/aoclp_solutions/src/y2025/day_05.rs @@ -2,7 +2,7 @@ use std::cmp::{max, min}; use std::ops::RangeInclusive; use std::str::FromStr; -use aoclp::solvers_impl::input::safe_get_input_as_many_of_two_types; +use aoclp::solvers::input::safe_get_input_as_many_of_two_types; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2025/day_06.rs b/aoclp_solutions/src/y2025/day_06.rs index 83df20c..b2af6bf 100644 --- a/aoclp_solutions/src/y2025/day_06.rs +++ b/aoclp_solutions/src/y2025/day_06.rs @@ -1,5 +1,5 @@ use aoclp::forth::Forth; -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2025/day_07.rs b/aoclp_solutions/src/y2025/day_07.rs index bdee252..84f2aa4 100644 --- a/aoclp_solutions/src/y2025/day_07.rs +++ b/aoclp_solutions/src/y2025/day_07.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use aoclp::positioning::direction::four_points::Direction4; use aoclp::positioning::pt::{Pt, matrix_to_map}; -use aoclp::solvers_impl::input::safe_get_input_as_terrain; +use aoclp::solvers::input::safe_get_input_as_terrain; use derive_where::derive_where; use itertools::Itertools; diff --git a/aoclp_solutions/src/y2025/day_08.rs b/aoclp_solutions/src/y2025/day_08.rs index 7ff5d05..fbc85fa 100644 --- a/aoclp_solutions/src/y2025/day_08.rs +++ b/aoclp_solutions/src/y2025/day_08.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use aoclp::num::zero; use aoclp::positioning::pt_3d::{Pt3d, euclidian_squared}; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2025/day_09.rs b/aoclp_solutions/src/y2025/day_09.rs index 0c19e67..50e1dc7 100644 --- a/aoclp_solutions/src/y2025/day_09.rs +++ b/aoclp_solutions/src/y2025/day_09.rs @@ -4,7 +4,7 @@ use std::iter::once; use aoclp::positioning::direction::four_points::Direction4; use aoclp::positioning::direction::{Direction, MovementDirection}; use aoclp::positioning::pt::{Pt, min_max, rectangle_corners, rectangular_area}; -use aoclp::solvers_impl::input::{Input, safe_get_input_as_many}; +use aoclp::solvers::input::{Input, safe_get_input_as_many}; use gratte::IntoEnumIterator; use itertools::Itertools; diff --git a/aoclp_solutions/src/y2025/day_10.rs b/aoclp_solutions/src/y2025/day_10.rs index f6a1f71..bc4b3a8 100644 --- a/aoclp_solutions/src/y2025/day_10.rs +++ b/aoclp_solutions/src/y2025/day_10.rs @@ -3,7 +3,7 @@ use std::sync::OnceLock; use aoclp::anyhow::Context; use aoclp::regex::Regex; -use aoclp::solvers_impl::input::{Input, safe_get_input_as_many}; +use aoclp::solvers::input::{Input, safe_get_input_as_many}; use itertools::Itertools; use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; use z3::ast::Int; diff --git a/aoclp_solutions/src/y2025/day_11.rs b/aoclp_solutions/src/y2025/day_11.rs index 1034b75..37edcb7 100644 --- a/aoclp_solutions/src/y2025/day_11.rs +++ b/aoclp_solutions/src/y2025/day_11.rs @@ -4,7 +4,7 @@ use std::sync::OnceLock; use aoclp::anyhow::Context; use aoclp::regex::Regex; -use aoclp::solvers_impl::input::safe_get_input_as_many; +use aoclp::solvers::input::safe_get_input_as_many; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/aoclp_solutions/src/y2025/day_12.rs b/aoclp_solutions/src/y2025/day_12.rs index 0e6702d..2a64dd8 100644 --- a/aoclp_solutions/src/y2025/day_12.rs +++ b/aoclp_solutions/src/y2025/day_12.rs @@ -5,7 +5,7 @@ use aoclp::anyhow::Context; use aoclp::captures::CapturesHelper; use aoclp::mapping::canvas::fixed::Canvas; use aoclp::regex::Regex; -use aoclp::solvers_impl::input::safe_get_input; +use aoclp::solvers::input::safe_get_input; use itertools::Itertools; pub fn part_1() -> usize { diff --git a/codingquest_clp/src/solvers_impl/input.rs b/codingquest_clp/src/solvers_impl/input.rs index aeb9d33..b306c14 100644 --- a/codingquest_clp/src/solvers_impl/input.rs +++ b/codingquest_clp/src/solvers_impl/input.rs @@ -1,7 +1,7 @@ use std::fs; use std::path::Path; -use aoclp::solvers_impl::input::Input; +use aoclp::solvers::input::Input; pub fn get_input(input: S) -> crate::Result> where diff --git a/codingquest_clp/src/solvers_impl/solvers.rs b/codingquest_clp/src/solvers_impl/solvers.rs index 363686c..43f12e8 100644 --- a/codingquest_clp/src/solvers_impl/solvers.rs +++ b/codingquest_clp/src/solvers_impl/solvers.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use std::fmt::Display; -use aoclp::solvers_impl::solvers::{Solver, SolverWrapper}; +use aoclp::solvers::build::{Solver, SolverWrapper}; use itertools::Itertools; #[macro_export]