From 615e4b9c68502fc90c71a6f1aea850b91fb40589 Mon Sep 17 00:00:00 2001 From: Cassandra de la Cruz-Munoz Date: Tue, 5 Dec 2023 21:34:35 +0100 Subject: [PATCH] Add src/01part2.rs --- src/01part2.rs | 115 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/01part2.rs diff --git a/src/01part2.rs b/src/01part2.rs new file mode 100644 index 0000000..4606e1d --- /dev/null +++ b/src/01part2.rs @@ -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 = Vec::new(); + let mut right_chars: Vec = 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) -> 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}, + }; +}