diff --git a/input_sources/day2.txt b/input_sources/day2.txt index b6501d3..876d2a0 100644 --- a/input_sources/day2.txt +++ b/input_sources/day2.txt @@ -98,4 +98,3 @@ Game 97: 5 green, 13 red, 7 blue; 2 blue, 12 red, 6 green; 10 blue, 11 red, 3 gr Game 98: 3 blue, 1 red; 4 blue; 2 green, 1 blue; 2 green, 1 red, 5 blue Game 99: 4 green, 3 blue, 9 red; 6 blue, 5 red, 3 green; 2 green, 4 blue, 7 red; 8 red, 4 blue; 2 green, 15 red; 4 red, 5 blue, 3 green Game 100: 8 red, 4 blue, 4 green; 10 blue, 3 red, 4 green; 10 green, 4 red; 18 red, 9 blue, 2 green; 12 red, 4 green, 2 blue - diff --git a/input_sources/day2short.txt b/input_sources/day2short.txt new file mode 100644 index 0000000..295c36d --- /dev/null +++ b/input_sources/day2short.txt @@ -0,0 +1,5 @@ +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 diff --git a/src/day1/mod.rs b/src/day1/mod.rs index 430c39d..ef75d19 100644 --- a/src/day1/mod.rs +++ b/src/day1/mod.rs @@ -1,6 +1,4 @@ -use std::fs::File; -use std::io::{self, BufRead}; -use std::path::Path; +use crate::utils::read_lines; use std::collections::HashMap; pub fn process() -> u32 { @@ -108,13 +106,6 @@ fn process_line(input_line: String) -> u32 { String::from(first_number.to_owned() + &last_number).trim().parse::().unwrap() } - -fn read_lines

(filename: P) -> io::Result>> -where P: AsRef, { - let file = File::open(filename)?; - Ok(io::BufReader::new(file).lines()) -} - fn extract_numbers_from_string(input: String) -> u32 { let mut nums_in_string: Vec = vec![]; for char in input.chars() { diff --git a/src/day2/mod.rs b/src/day2/mod.rs index 42557d8..538d19d 100644 --- a/src/day2/mod.rs +++ b/src/day2/mod.rs @@ -1,3 +1,68 @@ -pub fn process() { - println!("Hello from Day 2!"); +use crate::utils::read_lines; + +const RED_MAX: u32 = 12; +const GREEN_MAX: u32 = 13; +const BLUE_MAX: u32 = 14; + +static mut RED_MIN: u32 = 0; +static mut GREEN_MIN: u32 = 0; +static mut BLUE_MIN: u32 = 0; + +pub fn process() -> u32 { + let file_path = "./input_sources/day2short.txt"; + let mut total: u32 = 0; + if let Ok(lines) = read_lines(file_path) { + for game in lines.flatten() { + check_if_game_is_valid(game.clone()); + // println!("{:?}", is_game_valid); + if is_game_valid { + let game_id: u32 = get_game_id(game.clone()); + total = total + game_id; + } + } + } + total } + + +fn get_game_id(input_line: String) -> u32 { + let game_section: Vec<&str> = input_line.split(":").collect(); + let game_section_split: Vec<&str> = game_section[0].split(" ").collect(); + game_section_split[1].trim().parse().unwrap() +} + +fn check_if_game_is_valid(game: String) -> bool { + let split_on_colon: Vec<&str> = game.split(":").collect(); + let game_results: Vec<&str> = split_on_colon[1].split(";").collect(); + let mut valid_game: bool = true; + + for game_result in game_results { + let selections: Vec<&str> = game_result.split(",").collect(); + for selection in selections { + let split_selection: Vec<&str> = selection.trim().split(" ").collect(); + let num_selected: u32 = split_selection[0].trim().parse().unwrap(); + let color_selected: &str = split_selection[1].trim(); + + match color_selected { + "green" => { + if num_selected > GREEN_MIN { + GREEN_MIN = num_selected; + } + }, + "blue" => { + if num_selected > BLUE_MIN { + BLUE_MIN = num_selected; + } + }, + "red" => { + if num_selected > RED_MIN { + RED_MIN = num_selected; + } + }, + &_ => todo!() + } + } + } + valid_game +} + diff --git a/src/main.rs b/src/main.rs index b4da477..8c0f4b5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,15 @@ #![allow(warnings)] mod day1; mod day2; +mod utils; + fn main() { + let day1_results = day1::process(); let day2_results = day2::process(); - println!("The Answer to Day 1 is: {:?}", day1_results) + println!("The Answer to Day 1 is: {:?}", day1_results); + println!("The Answer to Day 2 is: {:?}", day2_results); } diff --git a/src/utils/mod.rs b/src/utils/mod.rs new file mode 100644 index 0000000..72f5153 --- /dev/null +++ b/src/utils/mod.rs @@ -0,0 +1,10 @@ +use std::fs::File; +use std::io::{self, BufRead}; +use std::path::Path; + +pub fn read_lines

(filename: P) -> io::Result>> +where P: AsRef, { + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +} +