solution: day 15
This commit is contained in:
parent
1f4e5be195
commit
afba7f543c
@ -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
58
src/days/d15.rs
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user