day three, part two
This commit is contained in:
+38
-8
@@ -1,24 +1,54 @@
|
|||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
pub fn parse(input: &str) -> Vec<(i32, i32)> {
|
pub fn parse(input: &str) -> Vec<(i32, i32)> {
|
||||||
let pattern = Regex::new(r"mul\((\d+),(\d+)\)").unwrap();
|
let pattern = Regex::new(r"^mul\((\d+),(\d+)\)").unwrap();
|
||||||
pattern.captures_iter(input).map(|caps| {
|
let do_pattern = Regex::new(r"^do\(\)").unwrap();
|
||||||
(caps.get(1).unwrap().as_str().parse().unwrap(), caps.get(2).unwrap().as_str().parse().unwrap())
|
let dont_pattern = Regex::new(r"^don't\(\)").unwrap();
|
||||||
}).collect()
|
|
||||||
|
let mut index: usize = 0;
|
||||||
|
let mut do_mul = true;
|
||||||
|
|
||||||
|
let mut parsed = Vec::new();
|
||||||
|
|
||||||
|
while index < input.len() {
|
||||||
|
if let Some(_) = do_pattern.captures(&input[index..]) {
|
||||||
|
do_mul = true;
|
||||||
|
index += 1;
|
||||||
|
} else if let Some(_) = dont_pattern.captures(&input[index..]) {
|
||||||
|
do_mul = false;
|
||||||
|
index += 1;
|
||||||
|
} else if let Some(caps) = pattern.captures(&input[index..]) {
|
||||||
|
if do_mul {
|
||||||
|
parsed.push((
|
||||||
|
caps.get(1).unwrap().as_str().parse().unwrap(),
|
||||||
|
caps.get(2).unwrap().as_str().parse().unwrap(),
|
||||||
|
));
|
||||||
|
index += caps.len();
|
||||||
|
} else {
|
||||||
|
index += 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
index += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
parsed
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let input = fs::read_to_string("input.txt").unwrap();
|
let input = fs::read_to_string("input.txt").unwrap();
|
||||||
|
|
||||||
|
//let input = String::from("don't()mul(2,2)");
|
||||||
|
|
||||||
let parsed = parse(&input);
|
let parsed = parse(&input);
|
||||||
|
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
|
|
||||||
for (x, y) in parsed {
|
for (x, y) in &parsed {
|
||||||
sum += x * y;
|
sum += *x * *y;
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("{sum}");
|
//println!("parsed: {parsed:?}");
|
||||||
|
println!("sum: {sum}");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user