33 lines
680 B
Rust
33 lines
680 B
Rust
#[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;
|
|
}
|
|
}
|
|
}
|