33 lines
1.1 KiB
Rust
33 lines
1.1 KiB
Rust
use crate::solvers::Solver;
|
|
use grid::*;
|
|
use std::io::BufRead;
|
|
|
|
pub struct TrashCompactor {}
|
|
|
|
impl Solver for TrashCompactor {
|
|
const PUZZLE_INDEX: u8 = 6;
|
|
const PUZZLE_NAME: &'static str = "Trash Compactor";
|
|
const INPUT_FILENAME: &'static str = "trash_compactor.txt";
|
|
|
|
fn process_data<R: BufRead>(&self, reader: R) -> (u64, u64) {
|
|
let mut part1 = 0;
|
|
let mut grid = Grid::new(0, 0);
|
|
for line in reader.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 == "+" {
|
|
part1 += grid.iter_col(i).sum::<u64>();
|
|
} else {
|
|
part1 += grid.iter_col(i).product::<u64>();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
(part1, 0)
|
|
}
|
|
}
|