···
fn generations(times: u32, mut world: Vec<u8>, size: usize, stuck: bool) -> Vec<u8> {
fn pos(x: usize, y: usize, size: usize) -> usize {
6
-
// this shit is unreadable man
7
-
(1 + y) * (size + 2) + (1 + x)
···
unsafe { *world.get_unchecked(pos(x, y, size)) }
16
-
let sizem = size - 1;
15
+
let sizep = size + 1;
let mut new_world = vec![0_u8; (size + 2).pow(2)];
21
-
world[pos(0, 0, size)] = 1;
22
-
world[pos(sizem, 0, size)] = 1;
23
-
world[pos(0, sizem, size)] = 1;
24
-
world[pos(sizem, sizem, size)] = 1;
20
+
world[pos(1, 1, size)] = 1;
21
+
world[pos(size, 1, size)] = 1;
22
+
world[pos(1, size, size)] = 1;
23
+
world[pos(size, size, size)] = 1;
27
+
for yo in 1..sizep {
30
+
for xo in 1..sizep {
···
// i hate the duplication here :(
52
-
world[pos(0, 0, size)] = 1;
53
-
world[pos(sizem, 0, size)] = 1;
54
-
world[pos(0, sizem, size)] = 1;
55
-
world[pos(sizem, sizem, size)] = 1;
51
+
world[pos(1, 1, size)] = 1;
52
+
world[pos(size, 1, size)] = 1;
53
+
world[pos(1, size, size)] = 1;
54
+
world[pos(size, size, size)] = 1;
···
let input = include_str!("../../input.txt").trim();
let size = input.split_once("\n").expect("invalid input").0.len();
64
-
// reads the input but adds a line of buffer on the sides. unreadable
63
+
// reads the input but adds a line of buffer on the sides
let buffer_line = ".".repeat(size);
let input: Vec<u8> = format!("{buffer_line}\n{input}\n{buffer_line}")