fn main() { let input = advent::read_file(1); println!("1a: {}", find_floor(&input)); println!("1b: {}", find_basement(&input)); } fn find_floor(input: &str) -> i32 { let mut pos = 0; for c in input.chars() { match c { '(' => pos += 1, ')' => pos -= 1, _ => break, } } pos } fn find_basement(input: &str) -> i32 { let mut count = 1; let mut pos = 0; for c in input.chars() { match c { '(' => pos += 1, ')' => pos -= 1, _ => break, } if pos < 0 { return count; } count += 1; } panic!("never reached basement"); } #[cfg(test)] mod tests { use super::*; #[test] fn test_floor() { assert_eq!(find_floor("(())"), 0); assert_eq!(find_floor("()()"), 0); assert_eq!(find_floor("((("), 3); assert_eq!(find_floor("(()(()("), 3); assert_eq!(find_floor("))((((("), 3); assert_eq!(find_floor("())"), -1); assert_eq!(find_floor("))("), -1); assert_eq!(find_floor(")))"), -3); assert_eq!(find_floor(")())())"), -3); } #[test] fn test_basement() { assert_eq!(find_basement(")"), 1); assert_eq!(find_basement("()())"), 5); } }