From 60ef7ce8437d6649e3475062a0e3b8b8a496f445 Mon Sep 17 00:00:00 2001 From: YK Date: Wed, 27 Nov 2024 12:06:53 +0300 Subject: [PATCH] solution: day 19 --- src/days.rs | 2 +- src/days/d19.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/days/d19.rs diff --git a/src/days.rs b/src/days.rs index 65bf211..ddf2ee7 100644 --- a/src/days.rs +++ b/src/days.rs @@ -16,7 +16,7 @@ pub mod d15; pub mod d16; pub mod d17; pub mod d18; -// pub mod d19; +pub mod d19; // pub mod d20; // pub mod d21; // pub mod d22; diff --git a/src/days/d19.rs b/src/days/d19.rs new file mode 100644 index 0000000..29d171f --- /dev/null +++ b/src/days/d19.rs @@ -0,0 +1,42 @@ +use crate::prelude::*; + +pub type I = u32; +pub type O = u32; + +fn _silver (data: I) -> O { + 2 * (data - (1 << (32 - data.leading_zeros() - 1))) + 1 +} + +fn _gold (data: I) -> O { + let mut left = D::from_iter(0..data/2); + let mut right = D::from_iter(data/2..data); + + while !left.is_empty() && !right.is_empty() { + if left.len() > right.len() { + left.pop_back(); + } else { + right.pop_back(); + } + right.push_front(left.pop_front().unwrap()); + left.push_back(right.pop_back().unwrap()); + } + + left[0] + 1 +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn silver () { + let ans = _silver(3005290); + assert_eq!(ans, 1816277) + } + + #[test] + fn gold () { + let ans = _gold(3005290); + assert_eq!(ans, 1) + } +}