Day 14 part 2.

This commit is contained in:
2024-01-13 21:48:48 +01:00
parent 18ea21dde6
commit 2d3c49c491

View File

@@ -29,7 +29,38 @@ fn part1(input: &Vec<(usize, usize, usize)>) -> usize {
.unwrap()
}
// #[aoc(day14, part2)]
// fn part2(input: &str) -> String {
// todo!()
// }
#[aoc(day14, part2)]
fn part2(input: &Vec<(usize, usize, usize)>) -> usize {
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))
}
}