37 lines
1.2 KiB
Rust
37 lines
1.2 KiB
Rust
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::<i32>().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);
|
|
}
|