diff options
Diffstat (limited to 'challenge-099')
| -rw-r--r-- | challenge-099/xkr47/rust/ch-1.rs | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/challenge-099/xkr47/rust/ch-1.rs b/challenge-099/xkr47/rust/ch-1.rs index 913903605e..50e83f14f4 100644 --- a/challenge-099/xkr47/rust/ch-1.rs +++ b/challenge-099/xkr47/rust/ch-1.rs @@ -12,19 +12,22 @@ fn main() { } fn do_match(text: &str, pattern: &str) -> bool { - if pattern.is_empty() { - text.is_empty() - } else { - match pattern.chars().next().unwrap() { - '*' => - do_match(text, &pattern[1..]) || - (!text.is_empty() && do_match(&text[1..], pattern)), - '?' => - !text.is_empty() && do_match(&text[1..], &pattern[1..]), - ch => - text.chars().next() == Some(ch) && do_match(&text[1..], &pattern[1..]) + fn inner(text: &[char], pattern: &[char]) -> bool { + if pattern.is_empty() { + text.is_empty() + } else { + match pattern[0] { + '*' => + inner(text, &pattern[1..]) || + (!text.is_empty() && inner(&text[1..], pattern)), + '?' => + !text.is_empty() && inner(&text[1..], &pattern[1..]), + ch => + text.get(0) == Some(&ch) && inner(&text[1..], &pattern[1..]) + } } } + inner(&text.chars().collect::<Vec<char>>(), &pattern.chars().collect::<Vec<char>>()) } #[cfg(test)] @@ -79,4 +82,9 @@ mod tests { fn do_test14() { assert_eq!(do_match("a", "*?"), true); } + + #[test] + fn do_test15() { + assert_eq!(do_match("få", "f*"), true); + } } |
