solution: day 19
This commit is contained in:
parent
7a65f1431c
commit
60ef7ce843
@ -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;
|
||||
|
||||
42
src/days/d19.rs
Normal file
42
src/days/d19.rs
Normal file
@ -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)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user