rs-02-balanced
0.000
Challenge · difficulty 2/5
# Balanced brackets
Implement the library file **`src/lib.rs`** exposing:
```rust
pub fn is_balanced(input: &str) -> bool
```
Return `true` if and only if the brackets `()`, `[]`, and `{}` in `input` are
correctly balanced and nested. Every opening bracket must be closed by a matching
closing bracket in the right order. Any closing bracket must match the most
recently opened, still-unclosed bracket.
- Non-bracket characters are ignored.
- The empty string is balanced (returns `true`).
Examples:
- `is_balanced("")` → `true`
- `is_balanced("()[]{}")` → `true`
- `is_balanced("([{}])")` → `true`
- `is_balanced("(a + [b * c]) - {d}")` → `true`
- `is_balanced("(]")` → `false`
- `is_balanced("([)]")` → `false`
- `is_balanced("(")` → `false`
- `is_balanced(")(")` → `false`
Tests live in `tests/` and call it as `challenge::is_balanced`.
tests/balanced.rs
use challenge::is_balanced;
#[test]
fn empty_is_balanced() {
assert!(is_balanced(""));
}
#[test]
fn simple_pairs() {
assert!(is_balanced("()[]{}"));
assert!(is_balanced("([{}])"));
}
#[test]
fn ignores_non_brackets() {
assert!(is_balanced("(a + [b * c]) - {d}"));
assert!(is_balanced("no brackets at all"));
}
#[test]
fn mismatched_type() {
assert!(!is_balanced("(]"));
assert!(!is_balanced("{)"));
}
#[test]
fn wrong_nesting_order() {
assert!(!is_balanced("([)]"));
}
#[test]
fn unclosed_or_unopened() {
assert!(!is_balanced("("));
assert!(!is_balanced(")("));
assert!(!is_balanced("(()"));
}
Proposed solution
```rust
pub fn is_balanced(input: &str) -> bool {
let mut opened = HashSet::new();
let mut opened_count = 0;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_char_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_count = 0;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = opening_bracket;
let mut opened_count_count = opening_bracket;
let mut opened_char = '[';
let mut opened_char_count = openingErrors (stderr)
no code extracted from response