blob: 9e116677795ed502779c4e942df14410ea81b159 [file] [log] [blame]
Skyler Greyc64945e2023-12-02 23:38:16 +00001fn main() {
2 let input = include_str!("../input.txt");
3
4 let mut part1_possible_id_sum = 0;
5 let mut game_power_sum = 0;
6
7 for (index, line) in input.split('\n').enumerate() {
8 if line == "" {
9 continue;
10 }
11
12 let game_data = line.split(": ").collect::<Vec<&str>>()[1];
13
14 let mut part1_possible = true;
15 let mut min_red = 0;
16 let mut min_green = 0;
17 let mut min_blue = 0;
18
19 for round in game_data.split("; ") {
20
21 for draw in round.split(", ") {
22 let [number_as_text, color] = draw.split(" ").collect::<Vec<&str>>()[..] else { panic!("Unparseable draw") };
23
24 let number = number_as_text.parse::<i32>().unwrap();
25
26 match color {
27 "red" => {
28 if number > 12 {
29 part1_possible = false;
30 }
31 if number > min_red {
32 min_red = number;
33 }
34 },
35 "green" => {
36 if number > 13 {
37 part1_possible = false;
38 }
39 if number > min_green {
40 min_green = number;
41 }
42 },
43 "blue" => {
44 if number > 14 {
45 part1_possible = false;
46 }
47 if number > min_blue {
48 min_blue = number;
49 }
50 },
51 noncolor => {
52 panic!("bogus color {}", noncolor);
53 }
54 }
55 }
56 }
57
58 if part1_possible {
59 part1_possible_id_sum += index + 1;
60 println!("Game {} is possible with 12, 13, 14", index + 1);
61 } else {
62 println!("Game {} is not possible with 12, 13, 14", index + 1);
63 }
64
65 let game_power = min_red * min_green * min_blue;
66 game_power_sum += game_power;
67 println!("Game {} has power {}", index + 1, game_power);
68 }
69
70 println!("Possible with 12, 13, 14 ID sum: {}", part1_possible_id_sum);
71 println!("Game power sum: {}", game_power_sum);
72}