blob: c513619ef4eaaea818aec66b5a9ca7750e4aa64b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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);
}
|