refact: day 19 part 1 with linked lists
This commit is contained in:
@@ -4,6 +4,3 @@ version = "0.1.0"
|
|||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
||||||
[profile.release]
|
|
||||||
lto = "fat"
|
|
||||||
|
|||||||
+17
-27
@@ -4,39 +4,29 @@ const LENGTH: usize = 5;
|
|||||||
const LENGTH: usize = 3_017_957;
|
const LENGTH: usize = 3_017_957;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut pointer = 0;
|
let builder = std::thread::Builder::new().stack_size(100_000_000);
|
||||||
let mut has_presents = [true; LENGTH];
|
let handle = builder.spawn(part_1).unwrap();
|
||||||
let mut next_elf = [0; LENGTH];
|
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;
|
*val = (idx + 1) % LENGTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
'outer: loop {
|
|
||||||
let mut offset = 1;
|
|
||||||
loop {
|
loop {
|
||||||
let idx = (pointer + offset) % LENGTH;
|
next[pointer] = next[next[pointer]];
|
||||||
if has_presents[idx] {
|
|
||||||
has_presents[idx] = false;
|
pointer = next[pointer];
|
||||||
pointer = idx;
|
|
||||||
|
// only one elf left
|
||||||
|
if next[pointer] == pointer {
|
||||||
|
println!("{}", pointer + 1);
|
||||||
break;
|
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user