···
3
-
fn generations(mut world: Vec<u8>, size: usize, part_2: bool) -> u32 {
3
+
fn solve(mut warehouse: Vec<u8>, size: usize, part_2: bool) -> u32 {
let pos = |x, y| y * (size + 2) + x;
8
-
let mut new_world = vec![0_u8; (size + 2).pow(2)];
8
+
let mut new_warehouse = vec![0_u8; (size + 2).pow(2)];
···
21
-
let was = *world.get_unchecked(pos(xo, yo)) == 1;
22
-
let neighbours = world.get_unchecked(pos(xm, ym))
23
-
+ world.get_unchecked(pos(xo, ym))
24
-
+ world.get_unchecked(pos(xp, ym))
25
-
+ world.get_unchecked(pos(xm, yo))
26
-
+ world.get_unchecked(pos(xp, yo))
27
-
+ world.get_unchecked(pos(xm, yp))
28
-
+ world.get_unchecked(pos(xo, yp))
29
-
+ world.get_unchecked(pos(xp, yp));
30
-
*new_world.get_unchecked_mut(pos(xo, yo)) =
21
+
let was = *warehouse.get_unchecked(pos(xo, yo)) == 1;
22
+
let neighbours = warehouse.get_unchecked(pos(xm, ym))
23
+
+ warehouse.get_unchecked(pos(xo, ym))
24
+
+ warehouse.get_unchecked(pos(xp, ym))
25
+
+ warehouse.get_unchecked(pos(xm, yo))
26
+
+ warehouse.get_unchecked(pos(xp, yo))
27
+
+ warehouse.get_unchecked(pos(xm, yp))
28
+
+ warehouse.get_unchecked(pos(xo, yp))
29
+
+ warehouse.get_unchecked(pos(xp, yp));
30
+
*new_warehouse.get_unchecked_mut(pos(xo, yo)) =
match (was, neighbours < 4) {
···
43
-
if !part_2 || world == new_world {
43
+
if !part_2 || warehouse == new_warehouse {
47
-
swap(&mut world, &mut new_world);
47
+
swap(&mut warehouse, &mut new_warehouse);
···
68
-
let part_1 = generations(input.clone(), size, false);
68
+
let part_1 = solve(input.clone(), size, false);
println!("Part 1: {}", part_1);
71
-
let part_2 = generations(input.clone(), size, true);
71
+
let part_2 = solve(input.clone(), size, true);
println!("Part 2: {}", part_2);