diff --git a/day19/Cargo.toml b/day19/Cargo.toml index 22f2ec1..b0e76b5 100644 --- a/day19/Cargo.toml +++ b/day19/Cargo.toml @@ -4,6 +4,3 @@ version = "0.1.0" edition = "2024" [dependencies] - -[profile.release] -lto = "fat" diff --git a/day19/src/main.rs b/day19/src/main.rs index 66a38c4..aae7211 100644 --- a/day19/src/main.rs +++ b/day19/src/main.rs @@ -4,39 +4,29 @@ const LENGTH: usize = 5; const LENGTH: usize = 3_017_957; fn main() { - let mut pointer = 0; - let mut has_presents = [true; LENGTH]; - let mut next_elf = [0; LENGTH]; + let builder = std::thread::Builder::new().stack_size(100_000_000); + let handle = builder.spawn(part_1).unwrap(); + handle.join().unwrap(); +} - for (idx, val) in next_elf.iter_mut().enumerate() { +fn part_1() { + let mut pointer = 0; + + let mut next = [0; LENGTH]; + + for (idx, val) in next.iter_mut().enumerate() { *val = (idx + 1) % LENGTH; } - 'outer: loop { - let mut offset = 1; - loop { - let idx = (pointer + offset) % LENGTH; - if has_presents[idx] { - has_presents[idx] = false; - pointer = idx; - break; - } else { - offset += 1; - } - } - let count = has_presents.iter().filter(|b| **b).count(); - println!("{count}"); - if count == 1 { - let correct_idx = has_presents - .iter() - .enumerate() - .filter(|(_, b)| **b) - .map(|(i, _)| i) - .next() - .unwrap() - + 1; - println!("{correct_idx}"); - break 'outer; + loop { + next[pointer] = next[next[pointer]]; + + pointer = next[pointer]; + + // only one elf left + if next[pointer] == pointer { + println!("{}", pointer + 1); + break; } } }