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

add a cute visualiser thing

aylac.top 2c3e306b d3599df5

verified
Changed files
+49 -4
2025
4
rust
src
+8
.gitignore
···
target
zig-out
.zig-cache
+
out
+
*.ppm
+
*.pgm
+
*.pbm
+
*.bmp
+
*.png
+
*.gif
+
*.qoi
+41 -4
2025/4/rust/src/main.rs
···
-
use std::mem::swap;
+
use std::{
+
fs::{self, File},
+
io::Write,
+
mem::swap,
+
};
+
+
fn to_img(warehouse: &Vec<u8>, size: usize, name: usize) {
+
let mut bytes: Vec<u8> = [].to_vec();
+
bytes.extend(format!("P5\n{size} {size}\n1\n").as_bytes());
+
let mut i = size + 3;
+
for _ in 0..size {
+
for _ in 0..size {
+
bytes.extend(if warehouse.get(i).unwrap() == &1_u8 {
+
[1]
+
} else {
+
[0]
+
});
+
i += 1;
+
}
+
i += 2;
+
}
+
let mut file = File::create(format!("out/{name}.pgm")).unwrap();
+
file.write_all(&bytes).unwrap();
+
}
-
fn solve(mut warehouse: Vec<u8>, size: usize, part_2: bool) -> u32 {
+
fn solve(
+
mut warehouse: Vec<u8>,
+
size: usize,
+
part_2: bool,
+
visualise: bool,
+
) -> u32 {
+
if visualise {
+
fs::create_dir_all("out").unwrap();
+
}
+
let pos = |x, y| y * (size + 2) + x;
let sizep = size + 1;
···
let mut rolls = 0;
+
let mut i = 0;
loop {
for yo in 1..sizep {
let ym = yo - 1;
···
}
swap(&mut warehouse, &mut new_warehouse);
+
i += 1;
+
if visualise {
+
to_img(&warehouse, size, i);
+
}
}
rolls
}
···
.flatten()
.collect();
-
let part_1 = solve(input.clone(), size, false);
+
let part_1 = solve(input.clone(), size, false, false);
println!("Part 1: {}", part_1);
-
let part_2 = solve(input.clone(), size, true);
+
let part_2 = solve(input.clone(), size, true, true);
println!("Part 2: {}", part_2);
}