use std::collections::HashMap; use crate::utils::input_reader; pub fn part_two() -> String { if let Ok(lines) = input_reader::read_lines("./input/2023/day_01/input.txt") { let mut result = 0; for line in lines { result += parse_line(&line.unwrap()); } result.to_string() } else { panic!("Failed to read lines from input file"); } } fn parse_line(s: &str) -> u32 { const RADIX: u32 = 10; let digits: HashMap<&str, u32> = HashMap::from([ ("one", 1), ("two", 2), ("three", 3), ("four", 4), ("five", 5), ("six", 6), ("seven", 7), ("eight", 8), ("nine", 9), ]); let mut first_digit = 0; let mut last_digit = 0; for i in 0..s.len() { let c = s.chars().nth(i).unwrap(); if c.is_digit(RADIX) { let digit = c.to_digit(RADIX).unwrap(); if first_digit == 0 { first_digit = digit; } last_digit = digit; } else { for (k, v) in digits.iter() { if s[i..].starts_with(k) { if first_digit == 0 { first_digit = *v; } last_digit = *v; } } } } return first_digit * 10 + last_digit; }