aboutsummaryrefslogtreecommitdiff
path: root/rust/sublist/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/sublist/src/lib.rs')
-rw-r--r--rust/sublist/src/lib.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/rust/sublist/src/lib.rs b/rust/sublist/src/lib.rs
new file mode 100644
index 0000000..cc62362
--- /dev/null
+++ b/rust/sublist/src/lib.rs
@@ -0,0 +1,19 @@
1#[derive(Debug, PartialEq, Eq)]
2pub enum Comparison {
3 Equal,
4 Sublist,
5 Superlist,
6 Unequal,
7}
8
9pub fn sublist<T: PartialEq>(fst: &[T], snd: &[T]) -> Comparison {
10 match (fst.len(),snd.len()) {
11 (0,0) => Comparison::Equal,
12 (0,_) => Comparison::Sublist,
13 (_,0) => Comparison::Superlist,
14 (n,m) if n < m && snd.windows(n).any(|s| fst == s) => Comparison::Sublist,
15 (n,m) if n > m && fst.windows(m).any(|f| snd == f) => Comparison::Superlist,
16 _ if fst == snd => Comparison::Equal,
17 _ => Comparison::Unequal
18 }
19}