aboutsummaryrefslogtreecommitdiff
path: root/challenge-099
diff options
context:
space:
mode:
authorJonas Berlin <jonas.berlin@nitorcreations.com>2021-02-09 15:50:35 +0200
committerJonas Berlin <jonas.berlin@nitorcreations.com>2021-02-09 15:50:35 +0200
commit42cdc5edff4eb8f5bcc2e1ca3cb95de6f3b43eb2 (patch)
tree276ec9680851f07fb5922fe8696d96ede0a080ec /challenge-099
parent641e3a346cbf54c6bb4fe7bc76d674d9845856bc (diff)
downloadperlweeklychallenge-club-42cdc5edff4eb8f5bcc2e1ca3cb95de6f3b43eb2.tar.gz
perlweeklychallenge-club-42cdc5edff4eb8f5bcc2e1ca3cb95de6f3b43eb2.tar.bz2
perlweeklychallenge-club-42cdc5edff4eb8f5bcc2e1ca3cb95de6f3b43eb2.zip
UTF-8 fix
Diffstat (limited to 'challenge-099')
-rw-r--r--challenge-099/xkr47/rust/ch-1.rs30
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);
+ }
}