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(&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::() { Ok(_) => grid.push_row(v.iter().map(|n| n.parse::().unwrap()).collect()), Err(_) => { for (i, sign) in v.iter().enumerate() { if *sign == "+" { part1 += grid.iter_col(i).sum::(); } else { part1 += grid.iter_col(i).product::(); } } } } } (part1, 0) } }