#[cfg(debug_assertions)] const LENGTH: usize = 5; #[cfg(not(debug_assertions))] const LENGTH: usize = 3_017_957; fn main() { let builder = std::thread::Builder::new().stack_size(100_000_000); let handle = builder.spawn(part_1).unwrap(); handle.join().unwrap(); } fn part_1() { let mut pointer = 0; let mut next = [0; LENGTH]; for (idx, val) in next.iter_mut().enumerate() { *val = (idx + 1) % LENGTH; } loop { next[pointer] = next[next[pointer]]; pointer = next[pointer]; // only one elf left if next[pointer] == pointer { println!("{}", pointer + 1); break; } } }