---cargo --- static CONTENT: &'static str = include_str!("./inputs/06_1.txt"); #[derive(Debug, PartialEq, Clone)] enum Operation { Add, Mul, } fn main() { let raw_grid: Vec<_> = CONTENT.lines().map(|l| l.trim()).filter(|l| !l.is_empty()).map(|l| { l.split(' ').map(|c| c.trim()).filter(|c| !c.is_empty()).collect::>() }).collect(); println!("Raw-Grid\n{:?}", raw_grid); let mut result = 0; let problem_count = raw_grid[0].len(); for p_idx in 0..problem_count { let op = match raw_grid.last().map(|r| r[p_idx]) { Some("+") => Operation::Add, Some("*") => Operation::Mul, other => unreachable!("Unexpected Operation {:?}", other), }; let elem_iter = raw_grid.iter().take(raw_grid.len()-1).map(|r| r[p_idx]).map(|v| v.parse::().unwrap()); let value = match op { Operation::Add => elem_iter.sum::(), Operation::Mul => elem_iter.product::() }; println!("V {}", value); result += value; } println!("Result {}", result); }