···
-
fn generations(mut world: Vec<u8>, size: usize, part_2: bool) -> u32 {
let pos = |x, y| y * (size + 2) + x;
-
let mut new_world = vec![0_u8; (size + 2).pow(2)];
···
-
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)) =
match (was, neighbours < 4) {
···
-
if !part_2 || world == new_world {
-
swap(&mut world, &mut new_world);
···
-
let part_1 = generations(input.clone(), size, false);
println!("Part 1: {}", part_1);
-
let part_2 = generations(input.clone(), size, true);
println!("Part 2: {}", part_2);
···
+
fn solve(mut warehouse: Vec<u8>, size: usize, part_2: bool) -> u32 {
let pos = |x, y| y * (size + 2) + x;
+
let mut new_warehouse = vec![0_u8; (size + 2).pow(2)];
···
+
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) {
···
+
if !part_2 || warehouse == new_warehouse {
+
swap(&mut warehouse, &mut new_warehouse);
···
+
let part_1 = solve(input.clone(), size, false);
println!("Part 1: {}", part_1);
+
let part_2 = solve(input.clone(), size, true);
println!("Part 2: {}", part_2);