From 42cdc5edff4eb8f5bcc2e1ca3cb95de6f3b43eb2 Mon Sep 17 00:00:00 2001 From: Jonas Berlin Date: Tue, 9 Feb 2021 15:50:35 +0200 Subject: UTF-8 fix --- challenge-099/xkr47/rust/ch-1.rs | 30 +++++++++++++++++++----------- 1 file 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::>(), &pattern.chars().collect::>()) } #[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); + } } -- cgit