use std::fs; use std::char; fn main() { let lines = fs::read_to_string("input").expect("Unable to read file"); //Part 1 println!("{}", reduce(lines.clone())); //Part 2 let mut all_lengths: Vec = Vec::new(); for i in 0..26 { let big_char = char::from_u32(65+i).unwrap(); let little_char = char::from_u32(97+i).unwrap(); let string = lines.clone().replace(big_char, "").replace(little_char, ""); all_lengths.push(reduce(string)); } println!("{}", all_lengths.iter().min().unwrap()); } fn reduce(string: String) -> i32 { let mut current_string = string; let mut new_string: Vec; let mut last_string = String::new(); while last_string != current_string { let all_chars: Vec = current_string.chars().into_iter().collect(); let mut count = 0; new_string = Vec::new(); while count < all_chars.len() - 1 { let cur_char_uppercase = all_chars[count].to_uppercase().collect::>()[0]; let cur_char_lowercase = all_chars[count].to_lowercase().collect::>()[0]; if all_chars[count] == cur_char_lowercase { if all_chars[count + 1] == cur_char_uppercase{ count += 1; } else { new_string.push(all_chars[count].clone()); } } else { if all_chars[count + 1] == cur_char_lowercase{ count += 1; } else { new_string.push(all_chars[count].clone()); } } count += 1; } new_string.push(all_chars[all_chars.len() - 1].clone()); last_string= current_string.clone(); current_string = new_string.clone().into_iter().collect(); } return (current_string.len()-1) as i32 }