From d78aee48a78fdeb90ef263b5d029fb70caa8b8a6 Mon Sep 17 00:00:00 2001 From: Anson Biggs Date: Fri, 1 Dec 2023 23:44:34 -0700 Subject: [PATCH] day2 --- src/day2.rs | 54 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/src/day2.rs b/src/day2.rs index 18fcf9c..af61820 100644 --- a/src/day2.rs +++ b/src/day2.rs @@ -1,4 +1,5 @@ // use itertools::Itertools; +use std::cmp; use std::fs; pub fn run() { @@ -6,9 +7,10 @@ pub fn run() { let input = fs::read_to_string("./inputs/day2.txt").expect("Could not read file"); println!("\tPart 1: {}", part1(&input)); - // println!("\tPart 2: {}", part2(&input)); + println!("\tPart 2: {}", part2(&input)); } +#[derive(Debug)] struct Game { red: usize, green: usize, @@ -66,7 +68,35 @@ fn part1(games: &str) -> usize { valid_games.into_iter().sum() } -// fn part2(calibration_input: &str) -> usize {} +fn part2(games: &str) -> usize { + let mut game_powers: Vec = vec![]; + for game in games.lines() { + let (_, rounds) = game.split_once(':').unwrap(); + + let mut game_minimums = Game { + red: 0, + green: 0, + blue: 0, + }; + for round in rounds.split(';') { + let dice = round.split(','); + for die in dice { + let (amount_str, color) = die.trim_start().split_once(' ').unwrap(); + let amount = amount_str.parse::().unwrap(); + + match color { + "red" => game_minimums.red = cmp::max(game_minimums.red, amount), + "green" => game_minimums.green = cmp::max(game_minimums.green, amount), + "blue" => game_minimums.blue = cmp::max(game_minimums.blue, amount), + _ => panic!("No color match found"), + } + } + } + + game_powers.push(game_minimums.red * game_minimums.green * game_minimums.blue); + } + game_powers.into_iter().sum() +} #[cfg(test)] mod tests { @@ -83,16 +113,14 @@ Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"; assert_eq!(part1(input), 8); } - // #[test] - // fn test_2() { - // let input = "two1nine - // eightwothree - // abcone2threexyz - // xtwone3four - // 4nineeightseven2 - // zoneight234 - // 7pqrstsixteen"; + #[test] + fn test_2() { + let input = "Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"; - // assert_eq!(part2(input), 281); - // } + assert_eq!(part2(input), 2286); + } }