42 lines
1.1 KiB
Rust
42 lines
1.1 KiB
Rust
---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::<Vec<_>>()
|
|
}).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::<usize>().unwrap());
|
|
|
|
let value = match op {
|
|
Operation::Add => elem_iter.sum::<usize>(),
|
|
Operation::Mul => elem_iter.product::<usize>()
|
|
};
|
|
println!("V {}", value);
|
|
|
|
result += value;
|
|
}
|
|
|
|
println!("Result {}", result);
|
|
}
|