summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/day3.rs38
-rw-r--r--src/main.rs2
-rw-r--r--src/test.rs3
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(
+
+)