things before changing

This commit is contained in:
Isaac Kleiner, M.D 2024-03-29 16:43:50 -04:00
parent 49174cafd5
commit 9bc58421c7
6 changed files with 88 additions and 14 deletions

View File

@ -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 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 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 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

View File

@ -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

View File

@ -1,6 +1,4 @@
use std::fs::File; use crate::utils::read_lines;
use std::io::{self, BufRead};
use std::path::Path;
use std::collections::HashMap; use std::collections::HashMap;
pub fn process() -> u32 { 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::<u32>().unwrap() String::from(first_number.to_owned() + &last_number).trim().parse::<u32>().unwrap()
} }
fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
where P: AsRef<Path>, {
let file = File::open(filename)?;
Ok(io::BufReader::new(file).lines())
}
fn extract_numbers_from_string(input: String) -> u32 { fn extract_numbers_from_string(input: String) -> u32 {
let mut nums_in_string: Vec<char> = vec![]; let mut nums_in_string: Vec<char> = vec![];
for char in input.chars() { for char in input.chars() {

View File

@ -1,3 +1,68 @@
pub fn process() { use crate::utils::read_lines;
println!("Hello from Day 2!");
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
}

View File

@ -1,11 +1,15 @@
#![allow(warnings)] #![allow(warnings)]
mod day1; mod day1;
mod day2; mod day2;
mod utils;
fn main() { fn main() {
let day1_results = day1::process(); let day1_results = day1::process();
let day2_results = day2::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);
} }

10
src/utils/mod.rs Normal file
View File

@ -0,0 +1,10 @@
use std::fs::File;
use std::io::{self, BufRead};
use std::path::Path;
pub fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
where P: AsRef<Path>, {
let file = File::open(filename)?;
Ok(io::BufReader::new(file).lines())
}