Skip to content

Instantly share code, notes, and snippets.

@samueltardieu
Created December 15, 2020 08:23
#[aoc_generator(day15)]
fn input_generator(input: &str) -> Vec<usize> {
input.split(',').map(|w| w.parse().unwrap()).collect()
}
#[aoc(day15, part1)]
fn part1(numbers: &[usize]) -> usize {
make_turns(numbers, 2020)
}
#[aoc(day15, part2)]
fn part2(numbers: &[usize]) -> usize {
make_turns(numbers, 30000000)
}
fn make_turns(numbers: &[usize], turns: usize) -> usize {
let mut said = vec![std::usize::MAX; turns];
for (turn, &n) in numbers.iter().enumerate() {
said[n] = turn;
}
let mut last = numbers[numbers.len() - 1];
for turn in numbers.len()..turns {
let mut previous = turn - 1;
std::mem::swap(&mut previous, &mut said[last]);
last = (turn - 1).saturating_sub(previous);
}
last
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment