diff options
Diffstat (limited to 'rust/sublist/src/lib.rs')
| -rw-r--r-- | rust/sublist/src/lib.rs | 19 |
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)] | ||
| 2 | pub enum Comparison { | ||
| 3 | Equal, | ||
| 4 | Sublist, | ||
| 5 | Superlist, | ||
| 6 | Unequal, | ||
| 7 | } | ||
| 8 | |||
| 9 | pub 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 | } | ||
