summaryrefslogtreecommitdiff
path: root/2023/Rust/src/day2.rs
diff options
context:
space:
mode:
Diffstat (limited to '2023/Rust/src/day2.rs')
-rw-r--r--2023/Rust/src/day2.rs63
1 files changed, 31 insertions, 32 deletions
diff --git a/2023/Rust/src/day2.rs b/2023/Rust/src/day2.rs
index 59ebd19..6e5b909 100644
--- a/2023/Rust/src/day2.rs
+++ b/2023/Rust/src/day2.rs
@@ -14,33 +14,21 @@ impl From<&str> for Game {
let (_, id) = game.split_once(' ').unwrap();
let id = id.parse::<usize>().unwrap();
let (mut r, mut g, mut b) = (0, 0, 0);
+ let mut items: Vec<(u32, &str)> = vec![];
for set in sets.split(';') {
- dbg!(&set.trim_start());
- let (first, second) = set.trim_start().split_once(',').unwrap();
- let (num_1, color_1) = first.split_once(' ').unwrap();
- let (num_2, color_2) = second.split_once(' ').unwrap();
- match color_1 {
- "red" => {
- r += num_1.parse::<u32>().unwrap();
- }
- "green" => {
- g += num_1.parse::<u32>().unwrap();
- }
- "blue" => {
- b += num_1.parse::<u32>().unwrap();
- }
- _ => {}
+ let sublist = set.split(',');
+ for list in sublist {
+ let list = list.trim_start();
+ let (num, color) = list.split_once(' ').unwrap();
+ items.push((num.parse::<u32>().unwrap(), color));
}
- match color_2 {
- "red" => {
- r += num_2.parse::<u32>().unwrap();
- }
- "green" => {
- g += num_2.parse::<u32>().unwrap();
- }
- "blue" => {
- b += num_2.parse::<u32>().unwrap();
- }
+ }
+ for (num, color) in items {
+ use std::cmp::max;
+ match color {
+ "red" => r = max(r, num),
+ "green" => g = max(g, num),
+ "blue" => b = max(b, num),
_ => {}
}
}
@@ -58,20 +46,31 @@ fn solve_part_one(data: &str) -> u32 {
for game in data.lines() {
games.push(Game::from(game));
}
- dbg!(&games);
- 42
+ let mut ans: u32 = 0;
+ for game in games {
+ if game.red <= 12 && game.green <= 13 && game.blue <= 14 {
+ ans += game.id as u32;
+ }
+ }
+ ans
}
fn solve_part_two(data: &str) -> u32 {
- todo!()
+ let mut games: Vec<Game> = vec![];
+ for game in data.lines() {
+ games.push(Game::from(game));
+ }
+ games
+ .iter()
+ .map(|game| game.red * game.blue * game.green)
+ .sum::<u32>()
}
fn main() {
let test_1 = include_str!("../input/day2_1.test");
- let test_2 = include_str!("../input/day2_2.test");
let prod = include_str!("../input/day2.prod");
println!("part_1 test: {:?}", solve_part_one(test_1));
- // println!("part_1 prod {:?}", solve_part_one(prod));
- // println!("part_2 test: {:?}", solve_part_two(test_2));
- // println!("part_2 prod {:?}", solve_part_two(prod));
+ println!("part_1 prod {:?}", solve_part_one(prod));
+ println!("part_2 test: {:?}", solve_part_two(test_1));
+ println!("part_2 prod {:?}", solve_part_two(prod));
}