1
0

Add solution for "Day 6: Trash Compactor", part 1

This commit is contained in:
Stefan Müller
2025-12-06 23:38:53 +01:00
parent 600a108f35
commit ad64b05db7
4 changed files with 57 additions and 0 deletions
+4
View File
@@ -18,6 +18,10 @@ This project does not contain the puzzle or example inputs as per the [copyright
:mag_right: Puzzle: <https://adventofcode.com/2025/day/5>, :white_check_mark: Solver: [`Cafeteria`](src/solvers/cafeteria.rs)
### Day 6: Trash Compactor
:mag_right: Puzzle: <https://adventofcode.com/2025/day/6>, :white_check_mark: Solver: [`Trash Compactor`](src/solvers/trash_compactor.rs)
## Tests
The package contains unit tests for each solver to help troubleshoot issues and prevent regressions. These tests cover the solutions for provided examples and full data inputs. The solutions used within the tests are user-specific.
+1
View File
@@ -7,4 +7,5 @@ fn main() {
solvers::printing_department::PrintingDepartment::new(),
));
solvers::run(Box::new(solvers::cafeteria::Cafeteria::new()));
solvers::run(Box::new(solvers::trash_compactor::TrashCompactor::new()));
}
+1
View File
@@ -5,6 +5,7 @@ use std::path::Path;
pub mod cafeteria;
pub mod printing_department;
pub mod trash_compactor;
pub trait Solver {
fn get_puzzle_index(&self) -> u8;
+51
View File
@@ -0,0 +1,51 @@
use crate::solvers::Solver;
use grid::*;
use std::fs::File;
use std::io;
pub struct TrashCompactor {
part1: u64,
part2: u64,
}
impl Solver for TrashCompactor {
fn get_puzzle_index(&self) -> u8 {
6
}
fn get_puzzle_name(&self) -> &str {
"Trash Compactor"
}
fn get_input_filename(&self) -> &str {
"trash_compactor.txt"
}
fn get_part1(&self) -> u64 {
self.part1
}
fn get_part2(&self) -> u64 {
self.part2
}
fn process_data(&mut self, lines: io::Lines<io::BufReader<File>>) {
let mut grid = Grid::new(0, 0);
for line in lines.map_while(Result::ok) {
let v: Vec<&str> = line.split(' ').filter(|s| !s.is_empty()).collect();
match v[0].parse::<u32>() {
Ok(_) => grid.push_row(v.iter().map(|n| n.parse::<u64>().unwrap()).collect()),
Err(_) => {
for (i, sign) in v.iter().enumerate() {
if *sign == "+" {
self.part1 += grid.iter_col(i).sum::<u64>();
} else {
self.part1 += grid.iter_col(i).product::<u64>();
}
}
}
}
}
}
}
impl TrashCompactor {
pub fn new() -> TrashCompactor {
TrashCompactor { part1: 0, part2: 0 }
}
}