Day 14 part 2.
This commit is contained in:
39
src/day14.rs
39
src/day14.rs
@@ -29,7 +29,38 @@ fn part1(input: &Vec<(usize, usize, usize)>) -> usize {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
// #[aoc(day14, part2)]
|
#[aoc(day14, part2)]
|
||||||
// fn part2(input: &str) -> String {
|
fn part2(input: &Vec<(usize, usize, usize)>) -> usize {
|
||||||
// todo!()
|
play(input, 2503)
|
||||||
// }
|
}
|
||||||
|
|
||||||
|
fn play(input: &Vec<(usize, usize, usize)>, rounds: usize) -> usize {
|
||||||
|
let mut state = vec![(0usize, 0usize); input.len()];
|
||||||
|
for time in 1..=rounds {
|
||||||
|
for i in 0..input.len() {
|
||||||
|
let (speed, fly, rest) = input[i];
|
||||||
|
let rem = (time - 1) % (fly + rest);
|
||||||
|
let flying = rem < fly;
|
||||||
|
if flying {
|
||||||
|
state[i].0 += speed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let max_distance = state.iter().map(|it| it.0).max().unwrap();
|
||||||
|
state.iter_mut().for_each(|it| if it.0 == max_distance {
|
||||||
|
it.1 += 1;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
state.into_iter().map(|it| it.1).max().unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use crate::day14::{parse, play};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn example2() {
|
||||||
|
assert_eq!(689, play(&parse("Comet can fly 14 km/s for 10 seconds, but then must rest for 127 seconds.
|
||||||
|
Dancer can fly 16 km/s for 11 seconds, but then must rest for 162 seconds."), 1000))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user