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()
|
||||
}
|
||||
|
||||
// #[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))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user