diff --git a/day5/src/main.rs b/day5/src/main.rs index d0ffd26..e5558cc 100644 --- a/day5/src/main.rs +++ b/day5/src/main.rs @@ -24,42 +24,22 @@ fn main() { } fn reduce(string: String) -> i32 { - let mut current_string = string; - let mut new_string: Vec; - let mut last_string = String::new(); + let all_chars: Vec = string.chars().into_iter().collect(); - while last_string != current_string { - let all_chars: Vec = current_string.chars().into_iter().collect(); - let mut count = 0; + let mut stack: Vec = Vec::new(); - 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()); - } + for c in all_chars{ + if !stack.is_empty(){ + let sub = *stack.last().unwrap() as i32 - c as i32; + if sub == 32 || sub == -32 { + stack.pop(); + } else{ + stack.push(c.clone()); } - - count += 1; + } else { + stack.push(c.clone()); } - - 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 -} + return stack.len() as i32 +} \ No newline at end of file