Add src/02part2.rs
This commit is contained in:
parent
615e4b9c68
commit
ef37c4c19f
96
src/02part2.rs
Normal file
96
src/02part2.rs
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
use std::fs;
|
||||||
|
use regex::Regex;
|
||||||
|
use std::cmp;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let file_path = "input/02input.txt";
|
||||||
|
let contents = fs::read_to_string(file_path).expect("should read file");
|
||||||
|
let lines = contents.lines();
|
||||||
|
let re = Regex::new(r"((((?<blue_a>\d+) blue)|((?<green_a>\d+) green)|((?<red_a>\d+) red)), ){0,2}(((?<blue_b>\d+) blue)|((?<green_b>\d+) green)|((?<red_b>\d+) red))").unwrap();
|
||||||
|
println!("{:?}", re.capture_names());
|
||||||
|
let mut sum = 0;
|
||||||
|
for line in lines {
|
||||||
|
let mut line_split = line.split(':');
|
||||||
|
let mut game_num = 0;
|
||||||
|
match line_split.next() {
|
||||||
|
Some(l) => {
|
||||||
|
match l[5 .. l.len()].parse::<u32>().ok() {
|
||||||
|
Some(n) => {game_num = n},
|
||||||
|
None => break,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => break,
|
||||||
|
}
|
||||||
|
let mut valid = true;
|
||||||
|
let mut has_next = true;
|
||||||
|
let mut plays = line_split.next().unwrap().split(";");
|
||||||
|
let mut caps = re.captures(plays.next().unwrap()).unwrap();
|
||||||
|
let mut min_red = 0;
|
||||||
|
let mut min_green = 0;
|
||||||
|
let mut min_blue = 0;
|
||||||
|
while valid && has_next {
|
||||||
|
let mut blue: u32 = 0;
|
||||||
|
let mut red: u32 = 0;
|
||||||
|
let mut green: u32 = 0;
|
||||||
|
match caps.name("blue_b") {
|
||||||
|
Some(m) => {
|
||||||
|
blue = m.as_str().parse::<u32>().ok().unwrap();
|
||||||
|
match caps.name("green_a") {
|
||||||
|
Some(g) => {green = g.as_str().parse::<u32>().ok().unwrap();},
|
||||||
|
None => {},
|
||||||
|
}
|
||||||
|
match caps.name("red_a") {
|
||||||
|
Some(r) => {red = r.as_str().parse::<u32>().ok().unwrap();},
|
||||||
|
None => {},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
match caps.name("green_b") {
|
||||||
|
Some(m) => {
|
||||||
|
green = m.as_str().parse::<u32>().ok().unwrap();
|
||||||
|
match caps.name("blue_a") {
|
||||||
|
Some(b) => {blue = b.as_str().parse::<u32>().ok().unwrap();},
|
||||||
|
None => {},
|
||||||
|
}
|
||||||
|
match caps.name("red_a") {
|
||||||
|
Some(r) => {red = r.as_str().parse::<u32>().ok().unwrap();},
|
||||||
|
None => {},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
match caps.name("red_b") {
|
||||||
|
Some(m) => {
|
||||||
|
red = m.as_str().parse::<u32>().ok().unwrap();
|
||||||
|
match caps.name("blue_a") {
|
||||||
|
Some(b) => {blue = b.as_str().parse::<u32>().ok().unwrap();},
|
||||||
|
None => {},
|
||||||
|
}
|
||||||
|
match caps.name("green_a") {
|
||||||
|
Some(g) => {green = g.as_str().parse::<u32>().ok().unwrap();},
|
||||||
|
None => {},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{} {} {}", red, blue, green);
|
||||||
|
min_red = cmp::max(min_red, red);
|
||||||
|
min_blue = cmp::max(min_blue, blue);
|
||||||
|
min_green = cmp::max(min_green, green);
|
||||||
|
// if red > 12 || blue > 14 || green > 13 {
|
||||||
|
// valid = false;
|
||||||
|
match plays.next() {
|
||||||
|
Some(l) => {caps = re.captures(l).unwrap()},
|
||||||
|
None => {has_next = false},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sum += min_red * min_blue * min_green;
|
||||||
|
// if valid {
|
||||||
|
// sum += game_num;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
println!("{}", sum);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user