AdventOfCode/y2015/src/days/d1.rs
2024-10-30 11:34:40 +01:00

75 lines
1.7 KiB
Rust

use core::panic;
pub fn process_part1(input: &str) -> i32 {
input
.chars()
.map(|char| {
if char == '(' {
1
} else if char == ')' {
-1
} else if char == '\n' {
0
} else {
panic!("Expected '(' or ')'")
}
})
.sum()
}
pub fn process_part2(input: &str) -> i32 {
let mut floor = 0;
let mut pos = 0;
for char in input.chars() {
pos += 1;
if char == '(' {
floor += 1;
} else if char == ')' {
floor += -1;
} else if char == '\n' {
floor += 0;
} else {
panic!("Expected '(' or ')'")
}
if floor == -1 {
break;
}
}
pos
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn part1() {
let result = process_part1("(())");
assert_eq!(result, 0);
let result = process_part1("(())");
assert_eq!(result, 0);
let result = process_part1("(((");
assert_eq!(result, 3);
let result = process_part1("(()(()(");
assert_eq!(result, 3);
let result = process_part1("))(((((");
assert_eq!(result, 3);
let result = process_part1("())");
assert_eq!(result, -1);
let result = process_part1("))(");
assert_eq!(result, -1);
let result = process_part1(")))");
assert_eq!(result, -3);
let result = process_part1(")())())");
assert_eq!(result, -3);
}
#[test]
fn part2() {
let result = process_part2(")(())))(");
assert_eq!(result, 1);
let result = process_part2("()()))))");
assert_eq!(result, 5);
}
}