my solutions to advent of code
aoc advent-of-code

names

aylac.top d3599df5 4343ab10

verified
Changed files
+16 -16
2025
4
rust
src
+16 -16
2025/4/rust/src/main.rs
···
use std::mem::swap;
-
fn generations(mut world: Vec<u8>, size: usize, part_2: bool) -> u32 {
+
fn solve(mut warehouse: Vec<u8>, size: usize, part_2: bool) -> u32 {
let pos = |x, y| y * (size + 2) + x;
let sizep = size + 1;
-
let mut new_world = vec![0_u8; (size + 2).pow(2)];
+
let mut new_warehouse = vec![0_u8; (size + 2).pow(2)];
let mut rolls = 0;
···
let xp = xo + 1;
unsafe {
-
let was = *world.get_unchecked(pos(xo, yo)) == 1;
-
let neighbours = world.get_unchecked(pos(xm, ym))
-
+ world.get_unchecked(pos(xo, ym))
-
+ world.get_unchecked(pos(xp, ym))
-
+ world.get_unchecked(pos(xm, yo))
-
+ world.get_unchecked(pos(xp, yo))
-
+ world.get_unchecked(pos(xm, yp))
-
+ world.get_unchecked(pos(xo, yp))
-
+ world.get_unchecked(pos(xp, yp));
-
*new_world.get_unchecked_mut(pos(xo, yo)) =
+
let was = *warehouse.get_unchecked(pos(xo, yo)) == 1;
+
let neighbours = warehouse.get_unchecked(pos(xm, ym))
+
+ warehouse.get_unchecked(pos(xo, ym))
+
+ warehouse.get_unchecked(pos(xp, ym))
+
+ warehouse.get_unchecked(pos(xm, yo))
+
+ warehouse.get_unchecked(pos(xp, yo))
+
+ warehouse.get_unchecked(pos(xm, yp))
+
+ warehouse.get_unchecked(pos(xo, yp))
+
+ warehouse.get_unchecked(pos(xp, yp));
+
*new_warehouse.get_unchecked_mut(pos(xo, yo)) =
match (was, neighbours < 4) {
(true, true) => {
rolls += 1;
···
}
}
-
if !part_2 || world == new_world {
+
if !part_2 || warehouse == new_warehouse {
break;
}
-
swap(&mut world, &mut new_world);
+
swap(&mut warehouse, &mut new_warehouse);
}
rolls
}
···
.flatten()
.collect();
-
let part_1 = generations(input.clone(), size, false);
+
let part_1 = solve(input.clone(), size, false);
println!("Part 1: {}", part_1);
-
let part_2 = generations(input.clone(), size, true);
+
let part_2 = solve(input.clone(), size, true);
println!("Part 2: {}", part_2);
}