fn main () { let data: String = std::fs::read_to_string("input").unwrap(); let lines = data.lines(); let new_lines = lines .map(|raw_line| replace_numbers(raw_line)) .fold(String::new(), |a, b| format!("{a}{b}\n")); std::fs::write("new_lines", new_lines); // let sum: u32 = lines.map(|line| { get_calibration_values(line) }).sum(); // println!("the sum of all calibration values is {sum}!"); } fn replace_numbers(raw_line: &str) -> String { let numbers: [&str; 10] = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]; let mut line: String = raw_line.to_string(); loop { let mut clean = false; for i in 0..numbers.len() { let old_line = line.clone(); line = line.replace(numbers[i], i.to_string().as_str()); if line.eq(&old_line) { clean = true; } } if clean { break; } } line } fn get_calibration_values(mut line: &str) -> u32 { line = replace_numbers(line).clone().as_str(); let first: u32 = line.chars().find_map(|ch| { ch.to_digit(10) }).unwrap(); let last: u32 = line.chars().rev().find_map(|ch| { ch.to_digit(10) }).unwrap(); let result = first * 10 + last; println!("{line} ({result})"); // first * 10 + last result }