From 45b7ff4185b8e254644a12934292dc5624180bbf Mon Sep 17 00:00:00 2001 From: Anthony Oteri Date: Mon, 4 Dec 2023 11:09:20 -0500 Subject: [PATCH] Day 2 - Part 2 Signed-off-by: Anthony Oteri --- day-02/src/main.rs | 82 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/day-02/src/main.rs b/day-02/src/main.rs index 4411fd9..92d0cd7 100644 --- a/day-02/src/main.rs +++ b/day-02/src/main.rs @@ -1,4 +1,4 @@ -#![allow(dead_code)] +use std::cmp::max; #[derive(Debug, Clone)] struct Game { @@ -16,6 +16,16 @@ impl Game { } true } + + fn max(&self) -> Bag { + let mut power = Bag::default(); + for bag in &self.bags { + power.red = max(power.red, bag.red); + power.green = max(power.green, bag.green); + power.blue = max(power.blue, bag.blue); + } + power + } } #[derive(Debug, Clone, Default, Eq, PartialEq)] @@ -25,6 +35,12 @@ struct Bag { blue: u32, } +impl Bag { + fn power(&self) -> u32 { + self.red * self.green * self.blue + } +} + fn parse_input(input: &str) -> Vec { let mut games = Vec::new(); @@ -85,10 +101,16 @@ fn part_1(input: &str) -> usize { .sum() } +fn part_2(input: &str) -> u32 { + let games = parse_input(input); + + games.iter().map(|g| g.max().power()).sum() +} fn main() { let input = include_str!("../input.txt"); println!("Part 1: {}", part_1(input)); + println!("Part 2: {}", part_2(input)); } #[cfg(test)] @@ -150,4 +172,62 @@ mod tests { assert_eq!(part_1(input), 8); } + + #[test] + fn test_max() { + let input = include_str!("../input_test_part1.txt"); + let games = parse_input(input); + + assert_eq!( + games[0].max(), + Bag { + red: 4, + green: 2, + blue: 6 + } + ); + + assert_eq!( + games[1].max(), + Bag { + red: 1, + green: 3, + blue: 4 + } + ); + + assert_eq!( + games[2].max(), + Bag { + red: 20, + green: 13, + blue: 6 + } + ); + + assert_eq!( + games[3].max(), + Bag { + red: 14, + green: 3, + blue: 15, + } + ); + + assert_eq!( + games[4].max(), + Bag { + red: 6, + green: 3, + blue: 2 + } + ); + } + + #[test] + fn test_part_2() { + let input = include_str!("../input_test_part1.txt"); + + assert_eq!(part_2(input), 2286); + } }