diff --git a/src/cal/day01.rs b/src/cal/day01.rs new file mode 100644 index 0000000..2af1e5b --- /dev/null +++ b/src/cal/day01.rs @@ -0,0 +1,18 @@ +use axum::{extract::Path, http::StatusCode, response::IntoResponse, routing::get, Router}; + +pub(crate) fn router() -> Router { + Router::new().route("/1/*ids", get(cube_bits)) +} + +async fn cube_bits(Path(ids): Path) -> Result { + let res = ids + .split('/') + .map(|id| id.parse::()) + .collect::, _>>() + .map_err(|_| StatusCode::BAD_REQUEST)? + .into_iter() + .fold(0i32, |acc, id| acc ^ id) + .pow(3) + .to_string(); + Ok(res) +} diff --git a/src/cal/mod.rs b/src/cal/mod.rs index a9dda0c..3384629 100644 --- a/src/cal/mod.rs +++ b/src/cal/mod.rs @@ -1,6 +1,8 @@ mod day00; +mod day01; pub(crate) fn router() -> axum::Router { axum::Router::new() .nest("/", day00::router()) + .nest("/", day01::router()) }