diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/day3.rs | 38 | ||||
-rw-r--r-- | src/main.rs | 2 | ||||
-rw-r--r-- | src/test.rs | 3 |
3 files changed, 43 insertions, 0 deletions
diff --git a/src/day3.rs b/src/day3.rs new file mode 100644 index 0000000..c513619 --- /dev/null +++ b/src/day3.rs @@ -0,0 +1,38 @@ +use std::fs; +fn check_mul(instruction: &str) -> bool { + if instruction.find(',').is_none() { return false; } + let (first_part, second_part) = instruction.split_once(',').expect("Expected mul to split"); + let first_num = &first_part[4..]; + let second_num = &second_part[..second_part.len() - 1]; + for digit in first_num.chars() { + if !digit.is_numeric() { + return false; + } + } + for digit in second_num.chars() { + if !digit.is_numeric() { + return false; + } + } + true +} +fn eval_mul(instruction: &str) -> i32 { + let (first_part, second_part) = instruction.split_once(',').expect("Expected mul to split"); + let first_num = str::parse::<i32>(&first_part[4..]).expect("Expect parse success"); + let second_num = + str::parse::<i32>(&second_part[..second_part.len() - 1]).expect("Expect parse success"); + first_num * second_num +} +pub fn part1(input_file_path: &str) { + let raw_str = fs::read_to_string(input_file_path).expect("File read error!!"); + let mut total: i32 = 0; + raw_str.rmatch_indices("mul(").for_each(|(index, string)| { + println!("{} --> {}", index, string); + let tmp = raw_str.split_at(index).1; + let end_index = tmp.find(')').expect("expected a closure"); + let trim_str = tmp.split_at(end_index + 1).0; + println!("{}", trim_str); + total += if check_mul(trim_str) {eval_mul(trim_str)} else {0}; + }); + println!("Eval result: {}", total); +} diff --git a/src/main.rs b/src/main.rs index c6bd8d8..9812d84 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,9 +4,11 @@ use std::{ }; mod day1; mod day2; +mod day3; fn main() { day1::part1("./day1.input"); day1::part2("./day1.input"); day2::part1("./day2.input"); day2::part2("./day2.input"); + day3::part1("./day3.input"); } diff --git a/src/test.rs b/src/test.rs new file mode 100644 index 0000000..26efbf6 --- /dev/null +++ b/src/test.rs @@ -0,0 +1,3 @@ +fn main( + +) |