This commit is contained in:
2016-12-01 12:36:32 +01:00
parent 1091076164
commit 2ebad93d10
4 changed files with 91 additions and 0 deletions

80
2015/01/src/main.rs Normal file
View File

@@ -0,0 +1,80 @@
use std::io::{self, Read};
fn main() {
let mut input = String::new();
io::stdin().read_to_string(&mut input).unwrap();
let count = process_1(&input);
println!("count={}", count);
if let Some(floor) = process_2(&input) {
println!("floor={}", floor + 1);
}
}
fn process_1(input: &str) -> i32 {
input
.chars()
.fold(0, |acc, x| {
match x {
'(' => acc + 1,
')' => acc - 1,
_ => acc,
}
})
}
fn process_2(input: &str) -> Option<usize> {
input
.chars()
.scan(0, |acc, x| {
*acc += match x {
'(' => 1,
')' => -1,
_ => 0,
};
Some(*acc)
})
.position(|acc| acc == -1)
}
#[cfg(test)]
mod tests {
use super::{process_1, process_2};
#[test]
fn example_01() {
assert_eq!(0, process_1("(())"));
assert_eq!(0, process_1("()()"));
}
#[test]
fn example_02() {
assert_eq!(3, process_1("((("));
assert_eq!(3, process_1("(()(()("));
assert_eq!(3, process_1("))((((("));
}
#[test]
fn example_03() {
assert_eq!(-1, process_1("())"));
assert_eq!(-1, process_1("))("));
}
#[test]
fn example_04() {
assert_eq!(-3, process_1(")))"));
assert_eq!(-3, process_1(")())())"));
}
#[test]
fn example_05() {
assert_eq!(Some(1 - 1), process_2(")"));
assert_eq!(Some(5 - 1), process_2("()())"));
}
}