day 2 part 2

This commit is contained in:
Acvaxoort 2023-12-03 00:13:39 +01:00
parent 3d03dc50d3
commit bf4a5fce0e

View File

@ -1,28 +1,36 @@
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 re = Regex::new("([0-9]+) (red|green|blue)").unwrap();
let mut current_id = 1;
let bag: HashMap<&str, i32> = HashMap::from([
("red", 12), ("green", 13), ("blue", 14)
let task1_max: [i32; 3] = [12, 13, 14];
let color_index: HashMap<&str, usize> = HashMap::from([
("red", 0), ("green", 1), ("blue", 2)
]);
let mut sum = 0;
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 > bag[color] {
if amount > task1_max[color_index[color]] {
possible = false;
break;
}
let color_min = &mut task2_min[color_index[color]];
*color_min = cmp::max(*color_min, amount);
}
if possible {
sum += current_id;
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: {}", sum);
println!("Sum 1: {}", sum1);
println!("Sum 2: {}", sum2);
}