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
··· 1 use std::mem::swap; 2 3 - fn generations(mut world: Vec<u8>, size: usize, part_2: bool) -> u32 { 4 let pos = |x, y| y * (size + 2) + x; 5 6 let sizep = size + 1; 7 8 - let mut new_world = vec![0_u8; (size + 2).pow(2)]; 9 10 let mut rolls = 0; 11 ··· 18 let xp = xo + 1; 19 20 unsafe { 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)) = 31 match (was, neighbours < 4) { 32 (true, true) => { 33 rolls += 1; ··· 40 } 41 } 42 43 - if !part_2 || world == new_world { 44 break; 45 } 46 47 - swap(&mut world, &mut new_world); 48 } 49 rolls 50 } ··· 65 .flatten() 66 .collect(); 67 68 - let part_1 = generations(input.clone(), size, false); 69 println!("Part 1: {}", part_1); 70 71 - let part_2 = generations(input.clone(), size, true); 72 println!("Part 2: {}", part_2); 73 }
··· 1 use std::mem::swap; 2 3 + fn solve(mut warehouse: Vec<u8>, size: usize, part_2: bool) -> u32 { 4 let pos = |x, y| y * (size + 2) + x; 5 6 let sizep = size + 1; 7 8 + let mut new_warehouse = vec![0_u8; (size + 2).pow(2)]; 9 10 let mut rolls = 0; 11 ··· 18 let xp = xo + 1; 19 20 unsafe { 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)) = 31 match (was, neighbours < 4) { 32 (true, true) => { 33 rolls += 1; ··· 40 } 41 } 42 43 + if !part_2 || warehouse == new_warehouse { 44 break; 45 } 46 47 + swap(&mut warehouse, &mut new_warehouse); 48 } 49 rolls 50 } ··· 65 .flatten() 66 .collect(); 67 68 + let part_1 = solve(input.clone(), size, false); 69 println!("Part 1: {}", part_1); 70 71 + let part_2 = solve(input.clone(), size, true); 72 println!("Part 2: {}", part_2); 73 }