use std::{fs, cmp::max}; fn main() { let input = fs::read_to_string("input.txt").unwrap(); let input: Vec<_> = input.split('\n').collect(); let mut sum = 0; for line in input { let split:Vec<_> = line.split(':').collect(); let rounds: Vec<_> = split.last().unwrap().split(';').collect(); let rounds: Vec<_> = rounds.iter().map(|x| x.split(',').collect::>()).collect(); let rounds: Vec<_> = rounds.iter().map(|x| x.iter().map(|x| x.trim().split(' ').collect::>()).collect::>()).collect(); let (mut r_max, mut g_max, mut b_max) = (0, 0, 0); for round in rounds { for set in round { let color = set.last().unwrap(); let num: i32 = set.first().unwrap().parse().unwrap(); match *color { "red" => r_max = max(num, r_max), "blue" => b_max = max(num, b_max), "green" => g_max = max(num, g_max), &_ => todo!() } } } //println!("{}", r_max); sum += r_max * g_max * b_max; } println!("{}", sum); } // use std::fs; // fn main() { // let input = fs::read_to_string("input.txt").unwrap(); // let input: Vec<_> = input.split('\n').collect(); // let mut game_id = 0; // let (r_max, g_max, b_max) = (12, 13, 14); // let mut sum = 0; // for line in input { // game_id += 1; // let split:Vec<_> = line.split(':').collect(); // let rounds: Vec<_> = split.last().unwrap().split(';').collect(); // let rounds: Vec<_> = rounds.iter().map(|x| x.split(',').collect::>()).collect(); // let rounds: Vec<_> = rounds.iter().map(|x| x.iter().map(|x| x.trim().split(' ').collect::>()).collect::>()).collect(); // let mut sad = false; // for round in rounds { // let (mut r_cur, mut g_cur, mut b_cur) = (0, 0, 0); // for set in round { // let color = set.last().unwrap(); // let num: i32 = set.first().unwrap().parse().unwrap(); // match *color { // "red" => r_cur += num, // "blue" => b_cur += num, // "green" => g_cur += num, // &_ => todo!() // } // } // if r_cur > r_max || b_cur > b_max || g_cur > g_max { // sad = true; // } // } // if !sad { // sum += game_id; // } // } // println!("{}", sum); // }