blob: 9e116677795ed502779c4e942df14410ea81b159 [file] [log] [blame]
fn main() {
let input = include_str!("../input.txt");
let mut part1_possible_id_sum = 0;
let mut game_power_sum = 0;
for (index, line) in input.split('\n').enumerate() {
if line == "" {
continue;
}
let game_data = line.split(": ").collect::<Vec<&str>>()[1];
let mut part1_possible = true;
let mut min_red = 0;
let mut min_green = 0;
let mut min_blue = 0;
for round in game_data.split("; ") {
for draw in round.split(", ") {
let [number_as_text, color] = draw.split(" ").collect::<Vec<&str>>()[..] else { panic!("Unparseable draw") };
let number = number_as_text.parse::<i32>().unwrap();
match color {
"red" => {
if number > 12 {
part1_possible = false;
}
if number > min_red {
min_red = number;
}
},
"green" => {
if number > 13 {
part1_possible = false;
}
if number > min_green {
min_green = number;
}
},
"blue" => {
if number > 14 {
part1_possible = false;
}
if number > min_blue {
min_blue = number;
}
},
noncolor => {
panic!("bogus color {}", noncolor);
}
}
}
}
if part1_possible {
part1_possible_id_sum += index + 1;
println!("Game {} is possible with 12, 13, 14", index + 1);
} else {
println!("Game {} is not possible with 12, 13, 14", index + 1);
}
let game_power = min_red * min_green * min_blue;
game_power_sum += game_power;
println!("Game {} has power {}", index + 1, game_power);
}
println!("Possible with 12, 13, 14 ID sum: {}", part1_possible_id_sum);
println!("Game power sum: {}", game_power_sum);
}