Add src/01part2.rs
This commit is contained in:
parent
2833e1dc93
commit
615e4b9c68
115
src/01part2.rs
Normal file
115
src/01part2.rs
Normal file
|
@ -0,0 +1,115 @@
|
|||
use std::fs;
|
||||
|
||||
fn main() {
|
||||
let file_path = "input/01input.txt";
|
||||
let contents = fs::read_to_string(file_path).expect("should read file");
|
||||
let lines = contents.lines();
|
||||
let mut sum = 0;
|
||||
for line in lines {
|
||||
let mut line_chars = line.chars();
|
||||
let mut line_chars_rev = line.chars().rev();
|
||||
let mut left_found = false;
|
||||
let mut right_found = false;
|
||||
let mut left_num: u32 = 0;
|
||||
let mut right_num: u32 = 0;
|
||||
let mut left_chars: Vec<char> = Vec::new();
|
||||
let mut right_chars: Vec<char> = Vec::new();
|
||||
while !left_found || !right_found {
|
||||
if !left_found {
|
||||
left_chars.push(line_chars.next().unwrap());
|
||||
if left_chars.last().unwrap().is_digit(10) {
|
||||
left_num = left_chars.last().unwrap().to_digit(10).unwrap();
|
||||
left_found = true;
|
||||
} else {
|
||||
left_num = num_from_word(&left_chars);
|
||||
while left_num == 10 || left_num == 12 {
|
||||
left_chars.remove(0);
|
||||
left_num = num_from_word(&left_chars);
|
||||
}
|
||||
if left_num < 10 {
|
||||
left_found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if !right_found {
|
||||
right_chars.insert(0, line_chars_rev.next().unwrap());
|
||||
if right_chars.first().unwrap().is_digit(10) {
|
||||
right_num = right_chars.first().unwrap().to_digit(10).unwrap();
|
||||
right_found = true;
|
||||
} else {
|
||||
right_num = num_from_word(&right_chars);
|
||||
while right_num == 10 || right_num == 11 {
|
||||
right_chars.pop();
|
||||
right_num = num_from_word(&right_chars);
|
||||
}
|
||||
if right_num < 10 {
|
||||
right_found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
println!("{}{}", left_num, right_num);
|
||||
sum += left_num * 10 + right_num;
|
||||
}
|
||||
println!("{}", sum);
|
||||
}
|
||||
|
||||
fn num_from_word(word: &Vec<char>) -> u32 {
|
||||
let transformed_word = word.into_iter().fold(String::new(), |w, c| {w.to_owned() + &c.to_string().to_string()});
|
||||
match transformed_word.as_str() {
|
||||
"one" => {return 1},
|
||||
"o" => {return 13},
|
||||
"on" => {return 11},
|
||||
"ne" => {return 12},
|
||||
"two" => {return 2},
|
||||
"t" => {return 13},
|
||||
"tw" => {return 11},
|
||||
"wo" => {return 12},
|
||||
"three" => {return 3},
|
||||
"th" => {return 11},
|
||||
"thr" => {return 11},
|
||||
"thre" => {return 11},
|
||||
"ee" => {return 12},
|
||||
"ree" => {return 12},
|
||||
"hree" => {return 12},
|
||||
"four" => {return 4},
|
||||
"f" => {return 11},
|
||||
"fo" => {return 11},
|
||||
"fou" => {return 11},
|
||||
"r" => {return 12},
|
||||
"ur" => {return 12},
|
||||
"our" => {return 12},
|
||||
"five" => {return 5},
|
||||
"fi" => {return 11},
|
||||
"fiv" => {return 11},
|
||||
"ve" => {return 12},
|
||||
"ive" => {return 12},
|
||||
"six" => {return 6},
|
||||
"s" => {return 11},
|
||||
"si" => {return 11},
|
||||
"ix" => {return 12},
|
||||
"x" => {return 12},
|
||||
"seven" => {return 7},
|
||||
"se" => {return 11},
|
||||
"sev" => {return 11},
|
||||
"seve" => {return 11},
|
||||
"en" => {return 12},
|
||||
"ven" => {return 12},
|
||||
"even" => {return 12},
|
||||
"eight" => {return 8},
|
||||
"e" => {return 13},
|
||||
"ei" => {return 11},
|
||||
"eig" => {return 11},
|
||||
"eigh" => {return 11},
|
||||
"ht" => {return 12},
|
||||
"ght" => {return 12},
|
||||
"ight" => {return 12},
|
||||
"nine" => {return 9},
|
||||
"n" => {return 13},
|
||||
"ni" => {return 11},
|
||||
"nin" => {return 11},
|
||||
"ine" => {return 12},
|
||||
"" => {return 13},
|
||||
_ => {return 10},
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user