diff options
author | Zhongheng Liu <z.liu@outlook.com.gr> | 2024-12-12 20:02:28 +0200 |
---|---|---|
committer | Zhongheng Liu <z.liu@outlook.com.gr> | 2024-12-12 20:02:28 +0200 |
commit | c0acf9524ac27b7df4895b0ae026272c20237d46 (patch) | |
tree | 29043a34fa0e609f8464de6a01157bb773e7ca20 /src/day3.rs | |
parent | dcf2fa129436852fc03d509bbd572e07ea1b3766 (diff) | |
download | advent2024-c0acf9524ac27b7df4895b0ae026272c20237d46.tar.gz advent2024-c0acf9524ac27b7df4895b0ae026272c20237d46.tar.bz2 advent2024-c0acf9524ac27b7df4895b0ae026272c20237d46.zip |
feat: cheeky day 3 part 1 solution
Diffstat (limited to 'src/day3.rs')
-rw-r--r-- | src/day3.rs | 38 |
1 files changed, 38 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); +} |