solution: day 15

This commit is contained in:
YK 2024-11-26 23:39:03 +03:00
parent 1f4e5be195
commit afba7f543c
2 changed files with 59 additions and 1 deletions

View File

@ -12,7 +12,7 @@ pub mod d11;
pub mod d12; pub mod d12;
pub mod d13; pub mod d13;
pub mod d14; pub mod d14;
// pub mod d15; pub mod d15;
// pub mod d16; // pub mod d16;
// pub mod d17; // pub mod d17;
// pub mod d18; // pub mod d18;

58
src/days/d15.rs Normal file
View File

@ -0,0 +1,58 @@
use crate::prelude::*;
pub type I = Vec<(usize, usize)>;
pub type O = usize;
fn _parse (data: &str) -> I {
data.lines()
.map(|e| e.trim().trim_matches('.')
.split_once(" has ")
.map(|(_, r)|
r.split_once(" positions; at time=0, it is at position ")
.map(|(n, p)| (n.parse().unwrap(), p.parse().unwrap()))
)
.flatten()
.unwrap()
)
.collect()
}
fn _solve (data: &I) -> O {
let d = |time, (size, position)| (time + position) % size == 0;
(0..).into_iter().find(|t| data.iter().enumerate().all(|(i, &df)| d(t + i + 1, df))).unwrap()
}
fn _silver (data: I) -> O {
_solve(&data)
}
fn _gold (mut data: I) -> O {
data.push((11, 0));
_solve(&data)
}
#[cfg(test)]
mod test {
use super::*;
fn read () -> I {
let data = inc!(15);
_parse(data)
}
#[test]
fn silver () {
let data = read();
let ans = _silver(data);
assert_eq!(ans, 122318)
}
#[test]
fn gold () {
let data = read();
let ans = _gold(data);
assert_eq!(ans, 3208583)
}
}