use std::fs::read_to_string; use std::collections::HashMap; use std::cmp; use regex::Regex; fn main() { let re = Regex::new("([0-9]+) (red|green|blue)").unwrap(); let mut current_id = 1; let task1_max: [i32; 3] = [12, 13, 14]; let color_index: HashMap<&str, usize> = HashMap::from([ ("red", 0), ("green", 1), ("blue", 2) ]); let mut sum1 = 0; let mut sum2 = 0; for line in read_to_string("input.txt").unwrap().lines() { let mut possible = true; let mut task2_min: [i32; 3] = [0; 3]; for captures in re.captures_iter(line) { let amount = captures[1].parse::().unwrap(); let color = &captures[2]; if amount > task1_max[color_index[color]] { possible = false; } let color_min = &mut task2_min[color_index[color]]; *color_min = cmp::max(*color_min, amount); } if possible { sum1 += current_id; } sum2 += task2_min[0] * task2_min[1] * task2_min[2]; println!("{}: {}, {}, {}", line, task2_min[0], task2_min[1], task2_min[2]); current_id += 1; } println!("Sum 1: {}", sum1); println!("Sum 2: {}", sum2); }